C#Enumerable.Except()只返回一次相同的元素

时间:2017-02-03 10:15:26

标签: c# linq

当运行下面的代码时,我希望看到数字3,两次,但显然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

他们不应该&#34; if(!set.Contains(element))yield return element;&#34;而不是&#34; if(set.Add(element))yield return element;&#34;?

1 个答案:

答案 0 :(得分:4)

显然,这不是一个错误; set difference 这里意味着两个序列都被视为集合,因此结果序列只包含每个元素一次。但是,documentation并没有真正扩大输出中是否会出现双打。