Вы не можете преобразовать List<Child> children
в List<Base> bases
Причина в том, что если компилятор разрешит вам это безопасно сделать. Вот почему
class Base {}
class Child1 : Base {}
class Child2 : Base {}
var children = new List<Child1>();
var bases = (List<Base>)children; // Let's assume this is acceptable
bases.Add(new Child2()); // Now this will add an instance of Child2
// to a List<Child1> which should not be possible
Если вы планируете читать только с children
, вы можете безопасно преобразовать его в IReadOnlyList<Base>
. Это безопасно, так как IReadOnlyList<>
интерфейс не допускает модификации. Подробнее об этом см. .
В качестве альтернативы, если вам нужен список базового класса , вы можете создать новый List<Base>
из List<Child1>
, используя Cast
и ToList
методы расширения:
using System.Linq;
...
Base[] bases = children.Cast<Base>().ToList();