# ValueType.GetHashCodeValueType.GetHashCodeValueType.GetHashCodeValueType.GetHashCode Method

## 定义

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

## 示例

``````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
``````

## 注解

@No__t-0 方法适用于从 @no__t 派生的类型。The 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.

### @No__t 的说明-0Notes for the Windows 运行时Windows Runtime

Windows 运行时Windows Runtime 结构调用 GetHashCode 方法时，它为不重写 GetHashCode 的值类型提供默认行为。When you call the GetHashCode method on a Windows 运行时Windows Runtime structure, it provides the default behavior for value types that don't override GetHashCode. 这是 .NET Framework 为 @no__t 提供的支持的一部分（请参阅Windows 应用商店应用和 Windows 运行时 .NET Framework 支持）。This is part of the support that the .NET Framework provides for the Windows 运行时Windows Runtime (see .NET Framework Support for Windows Store Apps and Windows Runtime). Windows 运行时Windows Runtime 结构不能重写 GetHashCode，即使它们是用C#或 Visual Basic 编写的，因为它们不能有方法。structures can't override GetHashCode, even if they're written with C# or Visual Basic, because they can't have methods. （此外，@no__t 中的结构不会继承 ValueType。）但是，当你在C#或 Visual Basic 代码中使用它们时，它们看起来有 ToStringEquals 和 @no__t 2 方法，而 .NET Framework 提供这些方法的默认行为。(In addition, structures in the Windows 运行时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.