将列表转换为父类列表

时间:2015-01-18 06:45:24

标签: c# unity3d

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

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

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

derivedList无法强制转换回父类的列表。

有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

但是,如果您想将新项目添加到baseList,那么您可以使用@K N的其他答案。


P.S :有关其他详细信息,您可以阅读有关协方差 Contravariance 的文章。 (来自MSDN

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

First Part
Second Part

答案 1 :(得分:0)

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