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();
    }
}
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 运行时的说明

GetHashCode Windows 运行时结构上调用方法时,它为不重写的值类型提供默认行为 GetHashCode 。 这是 .NET Framework 为 Windows 运行时提供的支持的一部分 (请参阅 Windows 应用商店应用的 .NET Framework 支持和 Windows 运行时) 。 Windows 运行时结构不能重写 GetHashCode ,即使它们是使用 c # 或 Visual Basic 编写的,因为它们不能有方法。 (此外,Windows 运行时本身中的结构不会继承 ValueType 。 ) 但是,在 ToString Equals GetHashCode c # 或 Visual Basic 代码中使用它们时,它们似乎具有、和方法,而 .NET Framework 提供这些方法的默认行为。

适用于