2017-02-03 52 views
3

當運行下面的代碼時,我希望看到數字3,兩次,但顯然Except()方法只返回一次相同的元素。C#Enumerable.Except()只返回一次相同的元素

List<int> x = new List<int>() {1, 2, 3, 3}; 
List<int> y = new List<int>() { 1, 2 }; 

var z = x.Except(y); /* returns 3, only once */ 

在本文檔中,他們說的兩組差集被定義爲不顯示在所述第二組中的第一組的成員。沒有記錄,他們只返回一次重複項目。 https://msdn.microsoft.com/en-us/library/bb300779(v=vs.110).aspx

這是一個錯誤,還是我錯過了這裏的東西?

Expect()方法的代碼在這裏可用:https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,e289e6c98881b2b8

他們不應該這樣做「if(!set.Contains(element))yield return element;」而不是「if(set.Add(element))yield return元素;」?

+0

'set'的定義意味着它不包含重複項,所以這是按預期工作的。 –

+0

該示例僅包含「2.3」一次? – TWT

+0

@xanatos - 您鏈接的頁面在第一個枚舉中似乎只有唯一的項目('double [] numbers1 = {2.0,2.1,2.2,2.3,2.4,2.5};') – Corak

回答

4

顯然,這不是一個錯誤;這裏的設置差異意味着兩個序列都被視爲集合,因此結果序列僅包含每個元素一次。但是,documentation並沒有真正放大雙打是否可能出現在輸出中。