2012-10-13 35 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(); 
    } 
} 

联盟只返回唯一值。

相关问题