繁体   English   中英

C#中的Casting List对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM