2014-01-14 36 views
-3
var list1 = new[] { 1, 2, 3, 4, 5 }; 
    var list2 = new int[] { }; 
    var x = list2.Except(list1).ToList(); 

這不會返回list1中的所有元素,var x實際上是一個空列表。根據msdn它應該返回list1中的所有元素。爲什麼不是,我錯過了什麼。除了方法返回沒有區別外的其他所有東西

包含兩個序列的元素的集合差異的序列。

+3

見http://en.wikipedia.org/ wiki/Complement_(set_theory) –

+1

如果你不確定它是如何工作的,你可以將'Enumerable.Except'翻譯成'「list1沒有list1」'。 –

+0

也許你正在尋找[Distinct](http://msdn.microsoft.com/en-us/library/bb348436%28v=vs.110%29.aspx)而不是... –

回答

5

它工作得很好:返回list2的所有項目,它們不存在於list1中。並且由於list2已經是空的,結果列表也是空的。

看在MSDN first參數說明:

IEnumerable<T>其是不是也排在第二,將返回的元素。

+0

因爲List2沒有元素不應該它返回list1中的所有元素?根據你的qoute?錯過了你的qoute – gh9

+0

不,它返回'first'中的所有項目,除了'second'中的項目。 – MarcinJuraszek

+0

錯讀你的qoute,感謝您的幫助 – gh9

2

措辭可能會混淆在MSDN上,但請參閱集合理論來理解它。

包含設置差異兩個序列的元素的序列。

一組差也被稱爲complement和是「是集乙元件的但不是在A」。

考慮到這一點,一個空數組.Except任何東西仍然是一個空數組。

0

你可能想

var list1 = new[] { 1, 2, 3, 4, 5 }; 
var list2 = new int[] { }; 
var x = list2.Union(list1).ToList(); 

既然你提到你期待

應該返回列表1中的所有元素

相關問題