定义一个IEnumerable<otherInterface>的接口
Define an interface of IEnumerable<otherInterface>
public interface IValue
{
int id {get; set;}
float val {get; set;}
}
public class Value:IValue
{
public int id {get; set;}
public float val {get; set;}
}
public interface IIvalueIEnum<T>
where T:IValue
{
IEnumerable<T> list {get; set;}
}
public class Collection:IIvalueIEnum<Value>
{
public List<Value> list {get; set;}
}
怎么做这个?我得到“集合无法实现 IIvalueIEnum 因为它没有匹配的 return 类型的 IEnumerable
嗯,根据接口你的 list
属性 需要 return IEnumarable<T>
,但是在实现中它 returns List<Value>
,这是不一样的!
你知道,你根本不需要任何 IIvalueIEnum
...你可以只使用 IEnumerable<IValue>
。或者 ICollection<IValue>
如果您希望能够向集合中添加值。
错误信息很清楚。 属性 应具有与接口中指定的签名相同的签名。这意味着 List<Value> list
不能被视为 IEnumerable<Value> list
.
的实现
这实际上是合乎逻辑的事情。该接口表示 list
可以包含任何集合,包括数组、列表、队列以及任何实现 IEnumerable<T>
的东西。这应该编译:
IIvalueIEnum<Value> someEnum=...;
someEnum.list = new []{new Value()};
属性 虽然只接受 List<Value>
项,这意味着它不能接受接口指定的值 属性。
class 应更改为:
public class Collection:IIvalueIEnum<Value>
{
public IEnumerable<Value> list {get; set;}
}
我怀疑 属性 只需要读取现有的集合,而不是 分配 新的 IEnumerable<T>
。 属性 应该是只读的并指向实际的集合:
public interface IIvalueIEnum<T>
where T:IValue
{
IEnumerable<T> list {get;}
}
public class Collection:IIvalueIEnum<Value>
{
public IEnumerable<Value> list =>ActualList;
public List<Value> ActualList{get;set;}
}
public interface IValue
{
int id {get; set;}
float val {get; set;}
}
public class Value:IValue
{
public int id {get; set;}
public float val {get; set;}
}
public interface IIvalueIEnum<T>
where T:IValue
{
IEnumerable<T> list {get; set;}
}
public class Collection:IIvalueIEnum<Value>
{
public List<Value> list {get; set;}
}
怎么做这个?我得到“集合无法实现 IIvalueIEnum 因为它没有匹配的 return 类型的 IEnumerable
嗯,根据接口你的 list
属性 需要 return IEnumarable<T>
,但是在实现中它 returns List<Value>
,这是不一样的!
你知道,你根本不需要任何 IIvalueIEnum
...你可以只使用 IEnumerable<IValue>
。或者 ICollection<IValue>
如果您希望能够向集合中添加值。
错误信息很清楚。 属性 应具有与接口中指定的签名相同的签名。这意味着 List<Value> list
不能被视为 IEnumerable<Value> list
.
这实际上是合乎逻辑的事情。该接口表示 list
可以包含任何集合,包括数组、列表、队列以及任何实现 IEnumerable<T>
的东西。这应该编译:
IIvalueIEnum<Value> someEnum=...;
someEnum.list = new []{new Value()};
属性 虽然只接受 List<Value>
项,这意味着它不能接受接口指定的值 属性。
class 应更改为:
public class Collection:IIvalueIEnum<Value>
{
public IEnumerable<Value> list {get; set;}
}
我怀疑 属性 只需要读取现有的集合,而不是 分配 新的 IEnumerable<T>
。 属性 应该是只读的并指向实际的集合:
public interface IIvalueIEnum<T>
where T:IValue
{
IEnumerable<T> list {get;}
}
public class Collection:IIvalueIEnum<Value>
{
public IEnumerable<Value> list =>ActualList;
public List<Value> ActualList{get;set;}
}