我有這樣的代碼:如何連接列表<type>?
protected IList<MyObject> offerte;
offerte = offerte.Union(from MyObject object in MyObjects
select object).ToList();
,但我得到一個System.ArgumentNullException
(也許是因爲我加入一個IEnumerable的<>在列表<>)。
那麼,我該如何連接列表<>?
我有這樣的代碼:如何連接列表<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的區別,這更有趣! :)只是適當地編輯你的帖子,它不會被低估(希望) –