我有一种情况,当我不期望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/

10-10 02:15