在使用字典时,我总是覆盖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方法。 这段代码不应该根据匿名类中的项目对项目进行分组吗?
答案 0 :(得分:17)
Nope - 匿名类自动生成适当的Equals / GetHashCode实现。
从C#语言规范,第7.5.10.6节:
Equals和GetHashcode方法 匿名类型覆盖方法 继承自object,并被定义 就Equals和GetHashcode而言 属性,这两个 同一匿名类型的实例 当且仅当他们所有人都是平等的 属性是平等的。