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。
Windows 執行階段 注意事項
當您在 Windows 執行階段 結構上呼叫 GetHashCode 方法時,它會提供未覆寫 GetHashCode之實值型別的默認行為。 這是 .NET 為 Windows 執行階段 (提供的支援一部分,請參閱 Windows 市集應用程式的 .NET 支援和 Windows 執行階段) 。 Windows 執行階段 結構無法覆寫 GetHashCode,即使它們是以 C# 或 Visual Basic 撰寫,因為它們不能有方法。 (此外,Windows 執行階段 本身中的結構不會繼承 ValueType.) 不過,當您在 C# 或 Visual Basic 程式代碼中使用 、 和 方法時,它們似乎會有 ToString、 Equals和 GetHashCode 方法,而 .NET 會提供這些方法的預設行為。
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應