泛型类型多态

Pro*_*ste 2 c# generics polymorphism inheritance

public class A {}

public class B : A {}
Run Code Online (Sandbox Code Playgroud)

现在有什么最好的方法让这个工作

List<A> a;
List<B> b = new List<B>();
a = b; // throw Cannot convert List<B> to List<A>
Run Code Online (Sandbox Code Playgroud)

谢谢

Luk*_*keH 5

List<T>类型不支持协方差,这样你就可以不分配List<B>直接向List<A>但即使B本身是直接分配给A.您需要执行传递列表b,转换并将项目添加到列表a中.该ConvertAll方法是一种方便的方法:

List<B> b = new List<B>();
// ...
List<A> a = b.ConvertAll(x => (A)x);
Run Code Online (Sandbox Code Playgroud)