public class Base {}
public class Derived : Base {}
public List<Derived> derivedList = new List<Derived>();
public List<Base> baseList = derivedList as List<Base>;
derivedList无法强制转换回父类的列表。
有办法解决这个问题吗?
答案 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的这两个视频:
答案 1 :(得分:0)
List<Base> baseList = derivedList.Cast<Base>().ToList();