gpt4 book ai didi

c# - 为什么 Enumerable.Except 返回不同的项目?

转载 作者:可可西里 更新时间:2023-11-01 09:02:27 25 4
gpt4 key购买 nike

刚刚花了一个多小时调试我们代码中的一个错误,最终证明是关于 Enumerable.Except 的错误。我们不知道的方法:

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

或更一般地说:

var ilist3 = new[] { 1 };
var ilist4 = new[] { 1, 1, 2, 2, 3 };
ilist4.Except(ilist3); // returns { 2, 3 } as opposed to { 2, 2, 3 }

查看 MSDN 页面:

This method returns those elements in first that do not appear in second. It does not also return those elements in second that do not appear in first.

我明白在这种情况下:

var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array

你得到空数组是因为第一个数组中的每个元素都“出现”在第二个数组中,因此应该被删除。

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

最佳答案

我当然不能确定他们为什么决定那样做。不过,我会试一试。

MSDN 是这样描述 Except 的:

Produces the set difference of two sequences by using the default equality comparer to compare values.

A Set是这样描述的:

A set is a collection of distinct objects, considered as an object in its own right

关于c# - 为什么 Enumerable.Except 返回不同的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4492419/

25 4 0