convert IList<Derived> to IReadOnlyCollection<Base>
c#, collections
Solution
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>`.
Problem
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)