ValueType.GetHashCode 方法

定义

返回此实例的哈希代码。Returns the hash code for this instance.

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

返回

Int32

一个 32 位带符号整数,它是此实例的哈希代码。A 32-bit signed integer that is the hash code for this instance.

示例

下面的示例演示如何使用 GetHashCode 派生值类型重写方法。The following example demonstrates how the GetHashCode method can be overridden by a derived value type.

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方法适用于从派生的类型 ValueTypeThe GetHashCode method applies to types derived from ValueType. 派生类型的一个或多个字段用于计算返回值。One or more fields of the derived type is used to calculate the return value. 如果调用派生类型的 GetHashCode 方法,则返回值不可能适合用作哈希表中的键。If you call the derived type's GetHashCode method, the return value is not likely to be suitable for use as a key in a hash table. 此外,如果其中一个或多个字段的值发生更改,则返回值可能不适合用作哈希表中的键。Additionally, if the value of one or more of those fields changes, the return value might become unsuitable for use as a key in a hash table. 在这两种情况下,请考虑编写您自己的方法的实现 GetHashCode ,该实现更密切地表示该类型的哈希代码的概念。In either case, consider writing your own implementation of the GetHashCode method that more closely represents the concept of a hash code for the type.

有关详细信息,请参阅 Object.GetHashCodeSystem.Collections.HashtableFor more information, see Object.GetHashCode, and System.Collections.Hashtable.

Windows 运行时的说明Notes for the Windows Runtime

GetHashCode Windows 运行时结构上调用方法时,它为不重写的值类型提供默认行为 GetHashCodeWhen you call the GetHashCode method on a Windows Runtime structure, it provides the default behavior for value types that don't override GetHashCode. 这是 .NET Framework 为 Windows 运行时提供的支持的一部分 (参阅对 Windows 应用商店应用的 .NET Framework 支持和 Windows 运行时) 。This is part of the support that the .NET Framework provides for the Windows Runtime (see .NET Framework Support for Windows Store Apps and Windows Runtime). Windows 运行时结构不能重写 GetHashCode ,即使它们是使用 c # 或 Visual Basic 编写的,因为它们不能有方法。Windows Runtime structures can't override GetHashCode, even if they're written with C# or Visual Basic, because they can't have methods. (此外,Windows 运行时本身中的结构不会继承 ValueType 。 ) 但是,在 ToString Equals GetHashCode c # 或 Visual Basic 代码中使用它们时,它们似乎具有、和方法,而 .NET Framework 提供这些方法的默认行为。(In addition, structures in the Windows Runtime itself don't inherit ValueType.) However, they appear to have ToString, Equals, and GetHashCode methods when you use them in your C# or Visual Basic code, and the .NET Framework provides the default behavior for these methods.

适用于