簡體   English   中英

基於主鍵的GetHashCode()-安全嗎?

[英]GetHashCode() based on a primary key - is it safe?

一個類具有ID屬性,並且此屬性從SQL表的主鍵列獲取值。

如果我寫這是一個好習慣

public override int GetHashCode()
{
    return this.ID + GetType().GetHashCode();
}

上我的課? 等於已經用相同的方法覆蓋了。)

為什么特別要在哈希碼中包含類型? 我可以看到,如果您在同一張圖中有許多具有相同ID的不同類型的對象,那將很有用,但是通常我只會使用

public override int GetHashCode()
{
    return ID; // If ID is an int
    // return ID.GetHashCode(); // otherwise
}

請注意,在繼承層次結構中,相等的思想變得棘手-這是相比繼承更偏愛組合的另一個原因。 您真的需要為此擔心嗎? 如果可以密封您的類,則將使相等性測試更加容易,因為您只需要編寫:

public override bool Equals(object obj)
{
    MyType other = obj as other;
    return other != null && other.ID == ID;
}

(您可能很想擁有一個強類型的Equals方法並實現IEquatable。)

你為什么不能做

public override int GetHashCode() {
    return this.ID.GetHashCode();
}

我不確定您在做什么是否是好的做法,因為我不熟悉如何將哈希碼分配給類型實例。 哈希碼的目的是使對象具有Int32形式的一致性表示形式。

暫無
暫無

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

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