2010-01-29 10 views
6

Während ich ein Wörterbuch verwende, überschreibe ich immer GetHashCode und Equals (oder stelle einen benutzerdefinierten Vergleich zum Wörterbuch bereit).Erstellen einer anonymen Klasse als benutzerdefinierter Schlüssel im Wörterbuch

Was passiert hinter den Abdeckungen, wenn ich eine anonyme Klasse als Schlüssel erstelle?

Beispielcode ....

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

Dieser Code gibt mir das erwartete Ergebnis, aber ich bin nicht GetHashCode Bereitstellung und Equals Methode zur anonymen Klasse. Sollte dieser Code nicht meine Artikel auf der Grundlage von Elementen in anonymer Klasse gruppieren?

Antwort

14

Nein - die anonyme Klasse generiert automatisch entsprechende Equals/GetHashCode-Implementierungen.

Aus der Sprache C# spec, Abschnitt 7.5.10.6:

Das Equals und GetHashCode Methoden auf anonymen Typen überschreiben die Methoden von Objekt geerbt und werden in Bezug auf das Equals und GetHashCode definiert der Eigenschaften, so dass zwei Instanzen des gleichen anonymen Typs gleich sind, wenn und nur wenn alle ihre Eigenschaften gleich sind.

Verwandte Themen