C#如何实现List<父类>到List<基类>的变化?


    class A {

    }
    class B:A {

    }
            List X = new();
            List Y = X;//报错

上面的代码会编译时报错,说无法隐式转化。添加显示转化也报错。
我该怎么办?

可以使用类型转换来实现这个转换。

List<B> X = new List<B>();
List<A> Y = X.Cast<A>().ToList();

或者使用 LINQ 的 OfType 方法来实现转换:

List<B> X = new List<B>();
List<A> Y = X.OfType<A>().ToList();

需要注意的是,这两种方法都是创建了一个新的 List<A> 对象,而不是将原有的 List<B> 转换为 List<A>。所以如果你想要在原有的 List<B> 基础上进行转换,你需要使用下面的方法:

List<B> X = new List<B>();
List<A> Y = new List<A>(X);