我遇到了实现接口的类的问题,该接口具有其他接口类型的列表。试图在下面创建一个简单的例子。
public interface IPerson
{
IEnumerable<IPersonEntry> Persons { get; set; }
DateTime LastUpdated { get; set; }
}
public class PersonType1 : IPerson
{
public IEnumerable<IPersonEntry> Persons { get; set; }
public DateTime LastUpdated { get; set; }
public PersonType1()
{
Persons = new List<NormalEntry>();
}
}
public class PersonType2 : IPerson
{
IEnumerable<IPersonEntry> Persons { get; set; }
public DateTime LastUpdated { get; set; }
public PersonType2()
{
Persons = new List<SomethingDifferent>();
}
}
public interface IPersonEntry
{
string Name { get; set; }
}
public class NormalEntry : IPersonEntry
{
// some other props
}
public class SomethingDifferent : IPersonEntry
{
// something different
}
public class SomeOtherClass
{
public SomeMethod()
{
PersonType2 p2 = new PersonType2();
p2.Persons.Add(new SomethingDifferent{
// blah = 5;
})
}
}
但是在我的SomeOtherClass方法中,我希望能够添加到List中,但它仍然被视为IEnumerable,而不是List&lt;&gt;。所以我无法添加它。任何帮助将不胜感激。
答案 0 :(得分:5)
您无法添加到IEnumerable<T>
。添加方法在IList<T>
中定义,因此您需要更改参数类型:
IList<IPersonEntry> Persons { get; set; }
答案 1 :(得分:1)
添加到Selman22的答案:关键是PersonType2.Persons
的公开可见定义是IEnumerable
,因此必须将其视为IEnumerable
- 即使您选择List
作为其实现。正如塞尔曼所说,你不能加入一个可枚举的。