var list1 = new[] { 1, 2, 3, 4, 5 };
var list2 = new int[] { };
var x = list2.Except(list1).ToList();
這不會返回list1中的所有元素,var x
實際上是一個空列表。根據msdn它應該返回list1中的所有元素。爲什麼不是,我錯過了什麼。除了方法返回沒有區別外的其他所有東西
包含兩個序列的元素的集合差異的序列。
var list1 = new[] { 1, 2, 3, 4, 5 };
var list2 = new int[] { };
var x = list2.Except(list1).ToList();
這不會返回list1中的所有元素,var x
實際上是一個空列表。根據msdn它應該返回list1中的所有元素。爲什麼不是,我錯過了什麼。除了方法返回沒有區別外的其他所有東西
包含兩個序列的元素的集合差異的序列。
它工作得很好:返回list2
的所有項目,它們不存在於list1
中。並且由於list2
已經是空的,結果列表也是空的。
看在MSDN first
參數說明:
的
IEnumerable<T>
其是不是也排在第二,將返回的元素。
因爲List2沒有元素不應該它返回list1中的所有元素?根據你的qoute?錯過了你的qoute – gh9
不,它返回'first'中的所有項目,除了'second'中的項目。 – MarcinJuraszek
錯讀你的qoute,感謝您的幫助 – gh9
措辭可能會混淆在MSDN上,但請參閱集合理論來理解它。
包含設置差異兩個序列的元素的序列。
一組差也被稱爲complement和是「是集乙元件的但不是在A」。
考慮到這一點,一個空數組.Except
任何東西仍然是一個空數組。
你可能想
var list1 = new[] { 1, 2, 3, 4, 5 };
var list2 = new int[] { };
var x = list2.Union(list1).ToList();
既然你提到你期待
應該返回列表1中的所有元素
見http://en.wikipedia.org/ wiki/Complement_(set_theory) –
如果你不確定它是如何工作的,你可以將'Enumerable.Except'翻譯成'「list1沒有list1」'。 –
也許你正在尋找[Distinct](http://msdn.microsoft.com/en-us/library/bb348436%28v=vs.110%29.aspx)而不是... –