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 ref struct Complex
{
public:
double m_Re;
double m_Im;
virtual bool Equals( Object^ ob ) override
{
if ( dynamic_cast<Complex^>(ob) )
{
Complex^ c = dynamic_cast<Complex^>(ob);
return m_Re == c->m_Re && m_Im == c->m_Im;
}
else
{
return false;
}
}
virtual int GetHashCode() override
{
return m_Re.GetHashCode() ^ m_Im.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 和更新版本,如果 InlineArrayAttribute 套用至類型,ValueType.GetHashCode 的默認實作會擲回 NotSupportedException。
Windows 運行時間的注意事項
當您在 Windows 執行時間結構上呼叫 GetHashCode 方法時,它會提供未覆寫 GetHashCode之實值型別的默認行為。 這是 .NET 為 Windows 運行時間提供的支援的一部分(請參閱 Windows 市集應用程式的 .NET 支援和 Windows 運行時間)。 Windows 運行時間結構無法覆寫 GetHashCode,即使它們是以 C# 或 Visual Basic 撰寫,因為它們不能有方法。 (此外,Windows 執行時間本身的結構不會繼承 ValueType。不過,當您在 C# 或 Visual Basic 程式代碼中使用它們時,它們似乎有 ToString、Equals和 GetHashCode 方法,而 .NET 會提供這些方法的預設行為。