I have a private field IList<DerivedClass> _elements and want to create a property returning 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)
Use List<T>.AsReadOnly() method:
public IReadOnlyCollection<BaseClass> BaseClasses
{
get { return _elements.Cast<BaseClass>().ToList().AsReadOnly(); }
}
Or since IReadOnlyCollection<T> is covariant you can skip 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>.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With