ValueType.GetHashCode 方法

定义

返回此实例的哈希代码。

C#
public override int GetHashCode();

返回

一个 32 位有符号整数,该整数是此实例的哈希代码。

示例

以下示例演示如何通过派生值类型重写 GetHashCode 方法。

C#
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();
    }
}

注解

GetHashCode 方法适用于派生自 ValueType的类型。 派生类型的一个或多个字段用于计算返回值。 如果调用派生类型的 GetHashCode 方法,则返回值可能不适合用作哈希表中的键。 此外,如果其中一个或多个字段的值发生更改,则返回值可能不适合用作哈希表中的键。 在任一情况下,请考虑编写自己的 GetHashCode 方法的实现,该方法更贴近类型哈希代码的概念。

有关详细信息,请参阅 Object.GetHashCodeSystem.Collections.Hashtable

.NET 9 及更高版本,如果 InlineArrayAttribute 应用于类型,则 ValueType.GetHashCode 的默认实现将引发 NotSupportedException

Windows 运行时的说明

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

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0