将列表转换为父 class 列表

convert list into parent class list

public class Base {}
public class Derived : Base {}

public List<Derived> derivedList = new List<Derived>();

public List<Base> baseList = derivedList as List<Base>;

derivedList 无法转换回父列表 class。

有解决办法吗?

List<Base> baseList = derivedList.Cast<Base>().ToList();

在 .Net 中,这是设计不允许的。原因是List<T>in-variant,不是co-variant。您可以将 List 更改为 IEnumerable,它将起作用:

public IEnumerable<Base> baseList = derivedList as IEnumerable<Base>;

但是,如果您想向 baseList 添加新项目,那么您可以使用@K N 的另一个答案。


P.S:有关更多详细信息,您可以阅读有关 CovarianceContravariance[= 的文章37=]。 (来自 MSDN

特别推荐 Eric Lippert 的这两个视频:

First Part
Second Part