c# - 为什么 Lookup<TKey, TValue>.Grouping 类不提供相等覆盖?

标签 c# linq ienumerable

我有一个场景,其中 IEnumerable.SequenceEqual 当我没想到扩展方法返回 false 时 - 准确地说,当使用它来比较两组(已知相同) ILookup<int, int> 时。通过调试器,我发现两个集合中的实际元素是 Lookup<TKey, TElement>.Grouping 的实例。类,所以我深入研究了引用源。

长话短说,SequenceEqual 使用的默认相等比较器是 ObjectEqualityComparer ,默认使用标准 Object.Equals 。但是Lookup<TKey, TElement>.Grouping不覆盖Equals ,所以ObjectEqualityComparer最终使用默认的 Object.Equals方法,调用 RuntimeHelpers.Equals ,它(我认为,因为它是 extern )正在进行引用比较并返回 false。

我没有看到任何充分的理由说明为什么粗体部分应该是正确的,因此提出了这个问题。有谁知道(或可以解释)这是否是一个故意的设计决定(如果是,为什么) - 或者如果这只是一个无意的遗漏?

最佳答案

公开,Lookup<TKey, TElement>.Grouping只是一个 IEnumerable<TElement> .

一般来说,两个IEnumerable<TElement>实例仅仅因为它们的元素相等而相等。

为什么应该 IEnumerable<TElement> 的这个特定实现有所不同吗?

关于c# - 为什么 Lookup<TKey, TValue>.Grouping 类不提供相等覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25931683/

相关文章:

c# - 删除处理对象的处理程序

c# - 如何通过分组将 <Entities> 列表转换为一个字符串?

C# Linq where 子句作为变量

c# - 如何使用Linq从匿名IEnumerable集合中选择项目

c# - 当涉及到带有大量可选参数的函数时,约定是什么?

c# - 返回两个数中较大值的方法

c# - GridControl 不断抛出无效路径异常

sql - 选择没有任何外键链接的行

c# - 将 IEnumerable 转换为 DataTable

c# - 带有简单 int[] 的 IEnumerable Any()