簡體   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