2012-10-02 90 views
0

我有兩個已結合的通用列表。說listA和listB,都是List<SomeType>如何將聯合通用列表轉換爲通用列表?

listA.Union(listB); 

的聯合在一起集是System.Linq.Enumerable.UnionIterator<string>類型,這是不一樣的List<SomeType>

我已經試過鑄造:

listA.Union(listB).ToList<SomeType>(); 

(List<SomeType>)listA.Union(listB); 

都失敗。我試圖訪問ForEach(),認爲我可以將結果添加到新列表中。 .Foreach()不可用。

我可以使用傳統的foreach並將每個項目添加到List<SomeType>變量。但是,是否有lambda表達式可以在一行中進行轉換,分配給類型爲List<SomeType>的變量?

+1

在結束時添加.ToList()listA.Union(listB).ToList(); – BlueChippy

+2

請發佈您的代碼。你發佈的代碼會導致一個'UnionIterator ',所以ToList可以解決你的問題。由於實際的對象是'UnionIterator ',你必須有其他的事情 - 可能是投影,或SomeType和字符串之間的其他混淆。 (同樣,這會阻止你追求你提到的「傳統的foreach」方法)。 – phoog

+0

就這樣你知道Union()將刪除兩個列表中的重複對象(如果SomeType.Equals()爲true)。如果你想保持重複,你應該使用Concat() – DarcyThomas

回答

4

您不必在ToList方法中明確投出列表。如果兩個列表的類型都是相同的,則最後只需執行ToList即可獲得相同類型的列表。

List<MyClass> listA = new List<MyClass>(); 
List<MyClass> listB = new List<MyClass>(); 
List<MyClass> temp = listA.Union(listB).ToList(); //Just do ToList at the end. 

顯式指定ToList方法中的類型也應該如此。我不知道爲什麼它不工作。

0

UnionIEnumerable<T>接口的擴展方法,而不是List<T>,因此它不知道或不關心你試圖連接列表中,因此不會產生一個結果,除非你叫ToList明確。

如果您想將一個列表「附加」到另一個列表,您可能需要改爲使用AddRange方法。

相關問題