IEnumerable的<>列出<>无法解析符号添加

时间:2014-12-06 19:08:35

标签: c# .net class interface

我遇到了实现接口的类的问题,该接口具有其他接口类型的列表。试图在下面创建一个简单的例子。

    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;。所以我无法添加它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您无法添加到IEnumerable<T>。添加方法在IList<T>中定义,因此您需要更改参数类型:

IList<IPersonEntry> Persons { get; set; }

答案 1 :(得分:1)

添加到Selman22的答案:关键是PersonType2.Persons的公开可见定义是IEnumerable,因此必须将其视为IEnumerable - 即使您选择List作为其实现。正如塞尔曼所说,你不能加入一个可枚举的。