在C#中,是否有可能将List <Child>转换为List <Parent>?

我想要做这样的事情:

List<Child> childList = new List<Child>(); ... List<Parent> parentList = childList; 

然而,因为parentList是一个儿童的祖先列表 ,而不是一个直接的祖先,我无法做到这一点。 有没有解决方法(除了单独添加每个元素)?

直接投射是不允许的,因为没有办法使它变得安全。 如果你有一个长颈鹿的名单,你把它列入动物名单,那么你可以把一只老虎列入长颈鹿名单! 编译器不会阻止你,因为老虎可能会进入一个动物列表。 编译器可以阻止你的唯一地方是不安全的转换。

在C#4中,我们将支持使用引用types参数化的SAFE接口和委托types的协变和相反性。 详情请看这里:

http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx

使用LINQ:

 List<Parent> parentList = childList.Cast<Parent>().ToList(); 

Cast<>()文档

是的,你可以这样做

 var result = List.And(x => x.Parent.All(b => b.ParentId == value)); 

你可以通过使用应用扩展方法的Linq方法,即List parentList = childList.Cast()。ToList();