2010-01-29 46 views
6

使用字典時,我總是覆蓋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和等於該匿名類的方法。 不應該這個代碼無法在匿名類中的項目的基礎上分組我的項目?

回答

14

不可以 - 匿名類自動生成適當的Equals/GetHashCode實現。

從C#語言規範,部分7.5.10.6:

上 匿名類型的Equals和GetHashCode方法覆蓋從對象繼承的方法 ,並在的Equals和GetHashCode 的術語被定義 的屬性,以便兩個 實例的相同匿名類型 相等當且僅當它們的所有屬性相同。