ValueType.GetHashCode 方法

定義

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

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

Windows 執行階段 注意事項

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

適用於