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