在字典中创建匿名类作为自定义键

时间:2010-01-29 09:41:42

标签: c# .net dictionary anonymous-class

在使用字典时,我总是覆盖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方法。 这段代码不应该根据匿名类中的项目对项目进行分组吗?

1 个答案:

答案 0 :(得分:17)

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

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

  

Equals和GetHashcode方法   匿名类型覆盖方法   继承自object,并被定义   就Equals和GetHashcode而言   属性,这两个   同一匿名类型的实例   当且仅当他们所有人都是平等的   属性是平等的。

相关问题