2012-10-13 36 views
1

我有3個列表<>對象。如何統一兩個列表<T>並將結果分配給第三個列表<T>?

List<T> listA = new List<t>(); 
List<T> listB = new List<t>(); 
List<T> listC = new List<t>(); 

我需要團結和listA的數組listB並將其分配給ListC:

List<T> listC = new ListA +ListB; 

我的問題是如何實現的呢?

+4

嘆息... List.AddRange怎麼樣?請在詢問之前做一些調查。 –

+0

http://stackoverflow.com/a/1825577/1689451 –

回答

7
List<int> A = new List<int>(); 
    A.Add(1); 
    A.Add(2); 
    List<int> B = new List<int>(); 
    B.Add(3); 
    B.Add(4); 

    List<int> C = new List<int>(); 

    C = A.Union<int>(B).ToList<int>(); 
+1

它沒有被指定,但'聯合'會刪除重複的條目,如果它們存在。如果@Michael想要保留重複項,請改用'Concat'。 –

+0

你應該提到OP需要實現'EqualityComparer '(如[這裏](http://stackoverflow.com/a/12873969/284240)),如果它是一個自定義類型的話。否則,他會通過引用來比較引用類型,而不是相等。 –

+1

非常好的答案! –

3

有點兒取決於您的要求,但可能是那麼容易,因爲

listC.AddRange(listA); 
listC.AddRange(listB); 
4

使用AddRange

List<T> listA = new List<t>(); 
List<T> listB = new List<t>(); 
List<T> listC = new List<t>(); 

listC.AddRange(listA); 
listC.AddRange(listB); 
2
listC.AddRange(listA); 
listC.AddRange(listB); 
2

嘗試AddRange()這樣的: -

listC.AddRange(listA); 
    listC.AddRange(listB); 
2

要麼使用AddRange正如其他人已經提到的,或者,如果你想工會都提到,你需要提供一個IEqualityComparer<T>和使用Enumerable.Union

List<Foo> third = first.Union(second, new FooComparer()).ToList(); 

這裏的發明實施例一實現:

public class FooComparer : IEqualityComparer<Foo> 
{ 
    public bool Equals(Foo x, Foo y) 
    { 
     return x.Id == y.Id; // assuming that there's a value type like ID as key 
    } 

    public int GetHashCode(Foo obj) 
    { 
     return obj.Id.GetHashCode(); 
    } 
} 

聯盟只返回唯一值。

相關問題