我有一种情况,当我不期望IEnumerable.SequenceEqual
扩展方法返回错误时-确切地说,当使用它比较两组(已知相同的)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/