簡體   English   中英

如何“刪除”我班的GetHashCode

[英]How to “delete” GetHashCode of my class

我有一個要使用相等語法比較其實例的結構。 但是我100%確信沒有任何情況可以將它們放入哈希結構中。 按照建議,每當覆蓋相等時,也需要覆蓋GetHashCode。 所以我的問題是我如何告訴編譯器在任何情況下都不需要此方法? 就像C ++ 11中的“ = delete”一樣。

而且我不想重寫,因為我真的不知道如何實現。 我的結構中有一個雙字段。 在我的相等性檢查中,允許有公差。 在這種情況下我應該如何實現GetHashCode?

謝謝!

GetHashCodeObject公共虛擬方法,它是CLR系統中所有對象的根類。 因此,不,您不能“刪除”該方法。 您可以覆蓋它,並在不希望用戶調用它的情況下引發異常,但是您不能按照所要求的意義“刪除”它。

對於可變引用類型, 僅在以下情況下才應覆蓋

  • 您可以從不可更改的字段計算哈希碼。
  • 您可以確保在對象包含在依賴於其哈希代碼的集合中時,該可變對象的哈希代碼不會更改。

否則,您不應在將對象存儲在哈希表中時對其進行修改。

為了實現自己的GetHashCode方法,在處理多個字段時,一種生成has代碼的方法是使用XOR組合這些字段。

關於Object.GetHashCode的文檔 <-如果您還沒有看過的話,這里有很多有用的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM