如何连接列表?
问题描述:
我有这样的代码:如何连接列表<type>?
protected IList<MyObject> offerte;
offerte = offerte.Union(from MyObject object in MyObjects
select object).ToList();
,但我得到一个System.ArgumentNullException
(也许是因为我加入一个IEnumerable的<>在列表<>)。
那么,我该如何连接列表<>?
答
联合不是拼接,请检查: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的回答)。
答
你会得到例外,因为offerte
为空。请尝试:
offerte = new List<MyObject>(MyObjects);
答
试试这个...
protected IList<MyObject> offerte = new List<MyObject>(MyObjects);
// do your stuff
答
联盟和连锁之间的主要区别是当你认为你的数据是集合或序列。
在联盟的情况下,你将合并两组数据,这意味着如果你有两个列表中一个值比将保持只有一次,因此合并{1, 2, 3}
和{2, 3, 4}
给你{1, 2, 3, 4}
(前提是您的自定义数据类型实现选择恰当的接口并重写散列函数以启用LINQ中的相等性比较)。
如果你想连接你的数据,那么第二部分将被追加到第一个标准杆,你将得到{1, 2, 3, 2, 3, 4}
。
你想要对你的数据做什么?
P.S.你不能得到半Enumerable和半列表,每个List是一个IEnumerable,因为List实现了这个接口。由于LINQ被懒惰地评估,你只会得到一个查询。在你的情况下,你可以通过调用.ToList()
方法强制进行急切的评估。
你只是忘记初始化你的对象,你的代码没有错。 –
-1?为什么是-1?我无法理解那些赞成... – markzzz
你的代码有一个基本问题(或者在这里是不完整的):你的对象在声明后缺少初始化,这就是你的异常的原因。下面的答案针对你的第二个问题:LINQ中Union和Concat的区别,这更有趣! :)只是适当地编辑你的帖子,它不会被低估(希望) –