ValueType.GetHashCode 方法

定義

傳回這個執行個體的雜湊碼。

public:
 override int GetHashCode();
public override int GetHashCode ();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer

傳回

Int32

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.GetHashCodeSystem.Collections.Hashtable

Windows 執行階段注意事項

當您在Windows 執行階段結構上呼叫 GetHashCode 方法時,它會提供未覆寫 GetHashCode 之實值型別的預設行為。 這是.NET Framework針對Windows 執行階段 (提供的支援的一部分,請參閱.NET Framework Windows Microsoft Store Apps 的支援和Windows 執行階段) 。 即使結構是以 C# 或 Visual Basic 撰寫,Windows 執行階段 結構仍無法覆 GetHashCode 寫 ,因為它們不能有方法。 (此外,Windows 執行階段本身中的結構不會繼承 ValueType .) 不過,當您在 C# 或Visual Basic程式碼中使用結構時,它們看起來會有 ToStringEqualsGetHashCode 方法,而.NET Framework會提供這些方法的預設行為。

適用於