c# - 泛型类型多态性

标签 c# generics inheritance polymorphism

public class A {}

public class B : A {}

现在实现此功能的最佳方法是什么

List<A> a;
List<B> b = new List<B>();
a = b; // throw Cannot convert List<B> to List<A>

谢谢

最佳答案

List<T> type 不支持协方差,因此您无法分配 List<B>直接发送至List<A>即使B其本身可直接分配给 A 。您需要执行列表 b 的传递,将项目转换并添加到列表 a 中当你去时。 ConvertAll 方法是执行此操作的便捷方法:

List<B> b = new List<B>();
// ...
List<A> a = b.ConvertAll(x => (A)x);

关于c# - 泛型类型多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5214063/

相关文章:

C# 结构泛型构造函数

c# - 使用 LINQ to XML 时保留某些节点

c# - 如何在 Visual Studio 中为字体类型使用 DefaultValueAtribute 类?

c# - 将 long 转换为对象然后转换为 ulong

C#:从 boolean 值继承?

java - super() 只能从子类构造函数中调用吗? | java

c# - 如何获取后代类的属性值

c# - using block什么时候调用dispose方法

c# - 关于通用 try catch 的建议

c# - 为什么 typeof(T) != instance.getType()?