2010-01-29 29 views
6

Sözlük kullanırken, her zaman GetHashCode ve Equals'ı geçersiz kılar (veya sözlüğe özel bir karşılaştırma yapar).Sözlükte özel anahtar olarak anonim sınıf oluşturma

Anahtar olarak anonim bir sınıf oluşturduğumda kapakların arkasında ne olur?

Örnek Kod ....

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); 

Bu kod bana beklenen sonuç verir, ama ben GetHashCode sağlayan ve anonim sınıf için bir yöntem Eşittir değilim. Bu kod öğelerimi anonim sınıftaki öğeler temelinde gruplandırmamalı mı?

cevap

14

Nope - anonim sınıf otomatik olarak uygun Equals/GetHashCode uygulamalarını oluşturur. C# dili spec itibaren

, bölüm 7.5.10.6:

anonim türlerinde Eşittir ve GetHashCode yöntemleri nesnenin miras yöntemleri geçersiz ve Eşittir ve GetHashCode açısından tanımlanır özelliklerin, yani aynı aynı örneğinin eşittir ve yalnızca tüm özellikleri eşitse eşittir.

İlgili konular