如何连接List <type>?</type>

时间:2011-11-18 09:26:44

标签: c# linq concatenation

我有这段代码:

protected IList<MyObject> offerte;

offerte = offerte.Union(from MyObject object in MyObjects
                        select object).ToList();

但我收到System.ArgumentNullException(可能是因为我在列表&lt;&gt;上添加了IEnumerable&lt;&gt;)。

那么,如何连接List&lt;&gt;?

4 个答案:

答案 0 :(得分:7)

联盟不是连接,请检查:http://msdn.microsoft.com/en-us/library/bb341731.aspx。例如,具有相同值的2组的联合将产生相同的精确集。

你需要的是Concat(惊讶,惊讶):

offerte = offerte.Concat(from MyObject object in MyObjects
                    select object).ToList();

但是,仍然会发生ArgumentNullException,导致offerte未初始化(请查看devdigital'的回答)。

答案 1 :(得分:4)

您收到异常,因为offerte为空。尝试:

offerte = new List<MyObject>(MyObjects);

答案 2 :(得分:2)

Union和Concatenation之间的主要区别在于您是将数据视为集合还是序列。

如果是Union,您将合并两组数据,这意味着如果两个列表中只有一个值,那么它只保留一次,因此合并{1, 2, 3}{2, 3, 4}会给您{{ 1}}(假设您的自定义数据类型实现了approriate接口并覆盖了散列函数,以便在LINQ中进行相等性的比较)。

如果你想连接你的数据,那么第二部分将被附加到第一个标准杆,你将获得{1, 2, 3, 4}

您想要对数据做什么?

P.S。并且你不能得到半枚举和半列表,每个List都是IEnumerable,因为List实现了这个接口。由于LINQ被懒惰地评估,你将只得到一个查询。在您的情况下,您可以通过调用{1, 2, 3, 2, 3, 4}方法强制进行评估。

答案 3 :(得分:1)

试试这个......

protected IList<MyObject> offerte = new  List<MyObject>(MyObjects); 

// do your stuff