[英]Casting List object in C#
我需要将一个List对象转换为另一个List对象,它是一个接口
public class THold : IHold
{..}
在这里,IHold是接口。
我想做这个:
List<THold> hold = new List<THold>();
List<IHold> test = hold;
最接近的是:
List<IHold> test = hold.Cast<IHold>().ToList();
问题是直接转换不存在。 如果我有以下情况怎么办:
public class THold : IHold { /* ... */ }
public class UHold : IHold { /* ... */ }
接着:
List<THold> holds = new List<THold>();
List<IHold> iholds = (List<IHold>) holds;
iholds.Add(UHold);
显然, UHold
实现了IHold
接口,但是显然也不能将其添加到THold
对象的列表中。
好吧, List<>
不能以非通用形式创建; 我猜您在撰写文章时在某处失去了尖括号。
无论如何,我猜您想从List<THold>
转到List<IHold>
,反之亦然。 无论哪种方式,最好的选择是Linq的OfType()方法:
List<THold> hold = new List<THold>();
//populate hold with items
List<IHold> test = hold.OfType<IHold>().ToList();
Cast<>()
方法也应该起作用,但是我发现每当我尝试使用它执行其规定的任务时,它就永远无法正常工作。 将Select()与投射每个项目的投影一起使用也可以:
List<IHold> test = hold.Select(x=>(IHold)x).ToList();
此msdn本文介绍了协方差和逆方差,它们是您所描述的术语。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.