10

在使用字典时,我总是覆盖 GetHashCode 和 Equals(或为字典提供自定义比较器)。

当我创建一个匿名类作为键时,幕后会发生什么?

示例代码....

 var groups=(from item in items
                 group item by new { item.ClientId, item.CustodianId, item.CurrencyId }
                   into g
                   select new {
                     Key=g.Key,                     
                     Sum=g.Sum(x => x.Cash)
                   }).ToDictionary(item=>item.Key,item=>item.Sum);

这段代码给了我预期的结果,但我没有为匿名类提供 GetHashCode 和 Equals 方法。这段代码不应该无法根据匿名类中的项目对我的项目进行分组吗?

4

1 回答 1

18

不——匿名类自动生成适当的 Equals/GetHashCode 实现。

从 C# 语言规范,第 7.5.10.6 节:

匿名类型的 Equals 和 GetHashcode 方法覆盖从 object 继承的方法,并根据属性的 Equals 和 GetHashcode 定义,因此当且仅当它们的所有属性都相等时,相同匿名类型的两个实例才相等。

于 2010-01-29T09:43:53.447 回答