3

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

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

如何在不遇到编译错误的情况下做到这一点?

(afaik 这应该有效,因为TinIReadOnlyCollection<T>是协变的)

4

1 回答 1

7

使用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>

于 2013-07-17T16:41:32.650 回答