My search for a helper to correctly combine constituent hashcodes for GetHashCode()
dường như thu hút sự thù địch. Tôi có ấn tượng từ các bình luận rằng một số nhà phát triển C# không nghĩ rằng bạn nên ghi đè lên GetHashCode()
thường xuyên - chắc chắn một số người bình luận dường như nghĩ rằng một thư viện để giúp có được hành vi đúng sẽ là vô ích. Chức năng này được coi là đủ hữu ích trong Java cho Java community to ask for it to be added to the JDK và là now in JDK 7.Tại sao tôi nên * không * ghi đè GetHashCode()?
Có một số lý do cơ bản mà trong C# bạn không cần phải - hoặc chắc chắn không nên ghi đè GetHashCode()
(và tương ứng, Equals()
) thường xuyên như trong Java? Tôi thấy mình làm điều này thường xuyên với Java, ví dụ bất cứ khi nào tôi tạo ra một loại mà tôi biết tôi muốn giữ trong một HashSet
hoặc sử dụng như một chìa khóa trong một HashMap
(tương đương, .net Dictionary
).
Bạn nên ghi đè GetHashCode() khi tạo loại đại diện cho giá trị. – SLaks
@Slaks như 'int',' double' và 'Point'? –
Liên quan: http://stackoverflow.com/questions/2907372/why-does-c-sharp-not-implement-gethashcode-for-collections – assylias