[英]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.