Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Enumerable.Except返回不同的项?_C#_.net_Linq - Fatal编程技术网

C# 为什么Enumerable.Except返回不同的项?

C# 为什么Enumerable.Except返回不同的项?,c#,.net,linq,C#,.net,Linq,我们刚刚花了一个多小时调试了代码中的一个bug,最终发现它与我们不知道的方法有关: var ilist = new[] { 1, 1, 1, 1 }; var ilist2 = Enumerable.Empty<int>(); ilist.Except(ilist2); // returns { 1 } as opposed to { 1, 1, 1, 1 } 查看MSDN页面: 此方法返回中的那些元素 第一个不会出现在第二个中。信息技术 也不会在中返回这些元素 第二个不出现在第一

我们刚刚花了一个多小时调试了代码中的一个bug,最终发现它与我们不知道的方法有关:

var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = Enumerable.Empty<int>();
ilist.Except(ilist2); // returns { 1 } as opposed to { 1, 1, 1, 1 }
查看MSDN页面:

此方法返回中的那些元素 第一个不会出现在第二个中。信息技术 也不会在中返回这些元素 第二个不出现在第一个

我知道在这种情况下:

var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array
得到空数组是因为第一个数组中的每个元素在第二个数组中“出现”,因此应该删除


但是为什么我们只得到第二个数组中没有出现的所有其他项的不同实例呢?这种行为背后的原因是什么?

我当然不能肯定地说他们为什么决定这样做。不过,我要试一试

除此之外,MSDN描述了:

生成两个的差 通过使用默认值创建序列 用于比较值的相等比较器

A被描述为:

集合是不同的集合 对象,在中被视为对象 它自己的权利


在我看来,闻起来像是一个bug或意外的功能。MSDN页面上没有明确的结果……这不是一个bug。
Except
方法旨在转换为定义为set操作的SQL
Except
运算符。作为集合操作,只返回不同的元素。MSDN使用的“集合”术语暗示了“区别性”。+1实现使用哈希集将问题从O(NxN)减少到O(N)。
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array