ValueType.GetHashCode 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回此实例的哈希代码。
public:
override int GetHashCode();
public override int GetHashCode();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer
返回
一个 32 位有符号整数,该整数是此实例的哈希代码。
示例
以下示例演示了如何 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.GetHashCode和 System.Collections.Hashtable。
.NET 9 及更高版本,如果ValueType.GetHashCode应用于类型,则 NotSupportedException的默认实现将引发 InlineArrayAttribute。
Windows 运行时的说明
在Windows 运行时结构上调用 GetHashCode 方法时,它为不重写 GetHashCode 的值类型提供默认行为。 这是 .NET 为 Windows 运行时提供的支持的一部分(请参阅 Windows 应用商店应用和 Windows 运行时的 .NET 支持)。 Windows 运行时结构不能重写 GetHashCode,即使它们是使用 C# 或Visual Basic编写的,因为它们不能有方法。 (此外,Windows 运行时本身的结构不会继承 ValueType。但是,在 C# 或 Visual Basic 代码中使用它们时,它们似乎具有 ToString、Equals 和 GetHashCode 方法,.NET为这些方法提供默认行为。