我有一个场景,其中 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/