Domanda

Durante l'utilizzo di dizionario, ho sempre la priorità GetHashCode e Equals (o fornire un operatore di confronto personalizzato al dizionario).

Che cosa accade dietro le coperte quando creo una classe anonima come la chiave?

Codice di esempio ....

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

Questo codice mi dà il risultato atteso, ma io non sono fornendo GetHashCode e Equals metodo per la classe anonima. Non dovrebbe questo codice non riescono a gruppo miei oggetti sulla base di elementi nella classe anonima ??

È stato utile?

Soluzione

No -. La classe anonima genera automaticamente Equals appropriate / implementazioni GetHashCode

Dal linguaggio C # spec, sezione 7.5.10.6:

  

I Equals e metodi GetHashCode su   tipi anonimi sostituiscono i metodi   ereditato da oggetto, e sono definiti   in termini di Equals e GetHashCode   delle proprietà, in modo che due   istanze dello stesso tipo anonimo   sono uguali se e solo se tutti i loro   proprietà sono uguali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top