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

Man*_*ani 9 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 17

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

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

匿名类型上的Equals和GetHashcode方法重写从object继承的方法,并根据属性的Equals和GetHashcode定义,因此当且仅当所有属性相等时,同一匿名类型的两个实例才相等.