在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();