将列表转换为父 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:有关更多详细信息,您可以阅读有关 Covariance 和 Contravariance[= 的文章37=]。 (来自 MSDN)
特别推荐 Eric Lippert 的这两个视频:
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:有关更多详细信息,您可以阅读有关 Covariance 和 Contravariance[= 的文章37=]。 (来自 MSDN)
特别推荐 Eric Lippert 的这两个视频: