2010-08-22 29 views
2

我有一個業務對象類BusinessObject,它實現了一個接口IAlternateInterface。我已經有了一個方法,它將返回一個具有我想要的對象的BusinessObject的通用列表,但我想將它們作爲IAlternateInterface的列表。我試圖做類似下面的psudo代碼,但在Visual Studio中出現「無法將源類型...轉換爲目標類型...」消息。什麼是轉換列表的最佳方式?asp.net中的C#列表轉換

public List<BusinessObject> GetObjects(){ 
//logic to get the list 
} 

public List<IAlternateInterface> GetInterfaceObjects(){ 
return GetObjects(); 
} 

回答

2

您正在尋找Enumerable.Cast<TResult>

GetObjects().Cast<IAlternateInterface>.ToList(); 

末的ToList如果你需要一個名單僅僅是必要的。鑄造<TResult>返回一個IEnumerable <TResult>

+0

我把代碼放在我的項目真正快速和這個c ompiles所以我相信它會工作。我會在週一使用它來確保,但我相當肯定這將做我所需要的。謝謝你和其他回答的人。 – William 2010-08-22 19:21:29

0

隨着LINQ Cast

public List<IAlternateInterface> GetInterfaceObjects(){ 
return GetObjects().Cast<IAlternateInterface>().ToList(); 
} 
2

使用Cast給出的兩個答案都很好,C#3 C#4 ...但如果你正在使用C# 4(和.NET 4),你也可以使用通用的方差來避免一步:

public List<IAlternateInterface> GetInterfaceObjects(){ 
    return GetObjects().ToList<IAlternateInterface>(); 
} 
+0

OP得到「無法將源類型轉換爲目標類型」,因此它可能不是C#4。但是在那種情況下,'GetObjects()'也不會在這裏工作? – Kobi 2010-08-22 06:54:33

+0

@Kobi:沒有,因爲'List '是不變的。你仍然需要建立一個調用ToList的'List ',但是它會使用'List '隱式轉換爲'IEnumerable '現在可用。 – 2010-08-22 07:03:26

+0

哦,當然!所以也許這裏乾淨的解決方案是返回'IEnumerable ',但這取決於OP需要...謝謝。 – Kobi 2010-08-22 07:06:13