c# -如何转换List到List,当Dog是Animal的子类时
本文关键字:Dog Animal List 子类 转换 何转换 | 更新日期: 2023-09-27 18:06:06
我有一个类Animal
,和它的子类Dog
。我有一个List<Animal>
,我想加入一些List<Dog>
的内容到List<Animal>
中。是否有更好的方法来做到这一点,而不是仅仅将List<Dog>
转换为List<Animal>
,然后使用AddRange
?
如果使用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,那么你将不得不手动执行强制类型转换
我相信这取决于你使用的是哪个版本的。net。我可能是错的,但是在。net 4中我认为你可以做
animalList.AddRange(dogList);
否则在。net 3.5中,你可以使用
animalList.AddRange(dogList.Select(x => (Animal)x));
您可以使用Cast<T> ()
//You must have using System.Linq;
List<Dog> dogs = new List<Dog> ();
List<Animal> animals = new List<Animal> ();
animals.AddRange (dogs.Cast<Animal> ());
编辑:正如dlev指出的,如果你运行框架4,你不需要强制转换。