Вам не нужен приведение, если вы используете C # 4:
List<Animal> animals = new List<Animal>();
List<Dog> dogs = new List<Dog>();
animals.AddRange(dogs);
Это разрешено, потому что AddRange()
принимает IEnumerable<T>
, что ковариантно .
Если у вас нет C # 4, тогда вам придется итерировать List<Dog>
и разыгрывать каждый элемент, поскольку ковариация была добавлена только тогда.Это можно сделать с помощью метода расширения .Cast<T>
:
animals.AddRange(dogs.Cast<Animal>());
Если у вас даже нет C # 3.5, вам придется выполнять приведение вручную.