2010-01-29 22 views
6

Khi sử dụng từ điển, tôi luôn ghi đè GetHashCode và Equals (hoặc cung cấp bộ so sánh tùy chỉnh cho từ điển).Tạo lớp ẩn danh làm khóa tùy chỉnh trong từ điển

Điều gì sẽ xảy ra sau các bìa khi tôi tạo một lớp ẩn danh làm khóa?

Mẫu Mã ....

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

Mã này mang lại cho tôi những kết quả mong đợi, nhưng tôi không cung cấp GetHashCode và Bằng phương pháp cho lớp nặc danh. Không nên mã này không nhóm các mục của tôi trên cơ sở các mục trong lớp ẩn danh ??

Trả lời

14

Không - lớp ẩn danh tự động tạo các cài đặt Equals/GetHashCode thích hợp.

Từ ngôn ngữ C# spec, phần 7.5.10.6:

Các Equals và phương pháp GetHashCode trên loại vô danh ghi đè lên các phương pháp kế thừa từ đối tượng, và được định nghĩa trong điều khoản của Equals và GetHashCode của các thuộc tính, sao cho hai trường hợp cùng loại ẩn danh bằng nhau nếu và chỉ khi tất cả các thuộc tính của chúng bằng nhau.

Các vấn đề liên quan