ValueType.GetHashCode 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回這個實例的哈希碼。
public:
override int GetHashCode();
public override int GetHashCode();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer
傳回
一個 32 位元有符號整數,是本實例的雜湊碼。
範例
以下範例說明如何透過導出值類型覆寫該 GetHashCode 方法。
public struct Complex
{
public double m_Re;
public double m_Im;
public override bool Equals( object ob ){
if( ob is Complex ) {
Complex c = (Complex) ob;
return m_Re==c.m_Re && m_Im==c.m_Im;
}
else {
return false;
}
}
public override int GetHashCode(){
return m_Re.GetHashCode() ^ m_Im.GetHashCode();
}
}
type Complex() =
member val m_Re = 0. with get, set
member val m_Im = 0. with get, set
override this.Equals(ob) =
match ob with
| :? Complex as c ->
this.m_Re = c.m_Re && this.m_Im = c.m_Im
| _ -> false
override this.GetHashCode() =
this.m_Re.GetHashCode() ^^^ this.m_Im.GetHashCode()
Public Structure Complex
Private m_Re As Double
Private m_Im As Double
Public Overloads Function Equals(ob As Object) As Boolean
If TypeOf ob Is Complex Then
Dim c As Complex = CType(ob, Complex)
Return m_Re = c.m_Re And m_Im = c.m_Im
Else
Return False
End If
End Function
Public Overloads Function GetHashCode() As Integer
Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
End Function
End Structure
備註
此 GetHashCode 方法適用於由 ValueType衍生出的類型。 會使用一個或多個導出型態的欄位來計算回傳值。 如果你呼叫導出型別的方法 GetHashCode ,回傳值通常不適合用作雜湊表中的鍵。 此外,若其中一個或多個欄位的值改變,該回傳值可能不適合用作雜湊表中的鍵值。 無論哪種情況,建議你自己寫一個更貼近該型別雜湊碼概念的方法實作 GetHashCode 。
欲了解更多資訊,請參見 Object.GetHashCode、 System.Collections.Hashtable及 。
.NET 9 及以後版本,預設實作的 ValueType.GetHashCode 若對型別套用 NotSupportedException,則拋出 InlineArrayAttribute。
Windows 運行時間的注意事項
當你呼叫 Windows 執行階段 結構上的 GetHashCode 方法時,它會為不會覆蓋 GetHashCode 的值類型提供預設行為。 這是 .NET 為 Windows 運行時間提供的支援的一部分(請參閱 Windows 市集應用程式和 Windows 運行時間的 .NET 支援)。 Windows 執行階段結構無法覆蓋GetHashCode,即使它們是用 C# 或 Visual Basic 寫的,因為它們無法有方法。 (此外,Windows 執行階段中的結構本身不會繼承ValueType。)不過,當你在 C# 或 Visual Basic 程式碼中使用它們時,它們似乎有 ToString、Equals 和 GetHashCode 方法,且 .NET 會為這些方法提供預設行為。