将IList <derived>转换为IReadOnlyCollection <base /> </derived>

时间:2013-07-17 16:38:24

标签: c# collections

我有一个私有字段IList<DerivedClass> _elements,想要创建一个返回IReadOnlyCollection<BaseClass>的属性。

public IReadOnlyCollection<BaseClass> BaseClasses
{
    get { return _elements; } // compile time error
}

如何在不遇到编译错误的情况下执行此操作?

(afaik这应该有用,因为T中的IReadOnlyCollection<T>是协变的)

1 个答案:

答案 0 :(得分:6)

使用List<T>.AsReadOnly()方法:

public IReadOnlyCollection<BaseClass> BaseClasses
{
    get { return _elements.Cast<BaseClass>().ToList().AsReadOnly(); }
}

或者由于IReadOnlyCollection<T>是协变的,您可以跳过Cast<BaseClass>

public IReadOnlyCollection<BaseClass> BaseClasses
{
    get { return _elements.ToList().AsReadOnly(); }
}

如果您的字段为ToList(),而非List<T>,则您甚至可以跳过IList<T>