2010-01-29 28 views
6

Al utilizar el diccionario, siempre anulo GetHashCode e Igual (o proporciono un comparador personalizado al diccionario).Creación de clase anónima como clave personalizada en el diccionario

Lo que sucede detrás de las cubiertas cuando creo una clase anónima como la clave?

Código de ejemplo ....

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

Este código me da el resultado esperado, pero yo no estoy proporcionando GetHashCode y Equals método para la clase anónima. ¿No debería este código no agrupar mis artículos en función de los elementos de la clase anónima?

Respuesta

14

No - la clase anónima genera automáticamente Iguales apropiados/implementaciones GetHashCode.

De la especificación de lenguaje C#, la sección 7.5.10.6:

Los métodos equals y GetHashCode en tipos anónimos anular los métodos heredados de objeto, y se definen en términos de los Iguales y GetHashCode de las propiedades, de modo que dos instancias del mismo tipo anónimo son iguales si y solo si todas sus propiedades son iguales.

Cuestiones relacionadas