C# - 当 Dog 是 Animal 的子类时,如何将 List<Dog> 转换为 List<Animal>?

标签 c# list polymorphism

我有一个类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> ,即 covariant .

如果您没有 C#4,那么您将不得不迭代 List<Dog>并转换每个项目,因为协方差只是在那时添加。您可以通过 .Cast<T> 完成此操作扩展方法:

animals.AddRange(dogs.Cast<Animal>());

如果您甚至没有 C#3.5,则必须手动进行转换。

关于C# - 当 Dog 是 Animal 的子类时,如何将 List<Dog> 转换为 List<Animal>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112036/

相关文章:

haskell多态函数评估错误

c++ - 动态转换返回 null

c# - 带有代码的错误模板的文本框

c# - 如何检查 *.chm 文件中是否存在特定主题?

c# - ASP.NET MVC : Execute code on all Actions (global OnActionExecuting? )

python - 在 python 中创建默认列表

javascript - 正确排序编号的无序列表项目

android - 显示错误的 ArrayAdapter 无法解决构造函数适配器错误

java - 以通用方式处理不同类型的对象

c# - 如何在 WPF 中绘制矩形?