[英]convert IList<Derived> to IReadOnlyCollection<Base>
I have a private field IList<DerivedClass> _elements
and want to create a property returning IReadOnlyCollection<BaseClass>
. 我有一个私有字段
IList<DerivedClass> _elements
并且想要创建一个返回IReadOnlyCollection<BaseClass>
的属性。
public IReadOnlyCollection<BaseClass> BaseClasses
{
get { return _elements; } // compile time error
}
How to do that without running into compile errors? 如何做到这一点而又不会遇到编译错误?
(afaik this should work, as the T
in IReadOnlyCollection<T>
is covariant) (AFAIK这应该工作,作为
T
在IReadOnlyCollection<T>
是协变)
Use List<T>.AsReadOnly()
method: 使用
List<T>.AsReadOnly()
方法:
public IReadOnlyCollection<BaseClass> BaseClasses
{
get { return _elements.Cast<BaseClass>().ToList().AsReadOnly(); }
}
Or since IReadOnlyCollection<T>
is covariant you can skip Cast<BaseClass>
: 或者因为
IReadOnlyCollection<T>
是协变的,所以可以跳过Cast<BaseClass>
:
public IReadOnlyCollection<BaseClass> BaseClasses
{
get { return _elements.ToList().AsReadOnly(); }
}
You could even skip ToList()
if your field was List<T>
, not IList<T>
. 如果您的字段是
List<T>
而不是IList<T>
,那么您甚至可以跳过ToList()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.