我有一个私有字段IList<DerivedClass> _elements
,想要创建一个返回IReadOnlyCollection<BaseClass>
的属性。
public IReadOnlyCollection<BaseClass> BaseClasses
{
get { return _elements; } // compile time error
}
如何在不遇到编译错误的情况下执行此操作?
(afaik这应该有用,因为T
中的IReadOnlyCollection<T>
是协变的)
答案 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>
。