繁体   English   中英

Visual Studio 2017-C#-代码生成-GetHashCode()-初始值-需要说明

[英]Visual Studio 2017 - C# - Code Generation - GetHashCode() - Initial Value - Explanation needed

我第一次将代码生成功能用于GetHashCode 我认为这是一件好事。 但是我不明白第一行代码。 数字如何计算? 如果我将更多字段添加到GetHashCode算法(例如,父类的字段),是否需要在代码的第一行中更改此数字?

public override int GetHashCode()
    {
        var hashCode = 589741190;
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(SyncKey);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Firstname);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Lastname);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Notes);
        hashCode = hashCode * -1521134295 + EqualityComparer<DateTime?>.Default.GetHashCode(Birthdate);
        return hashCode;
    }

大多数情况下,质数用于哈希函数。 但是589741190不是质数。 我不知道您从哪里获得代码,但是我认为这个数字是随机选择的。 (这并不意味着此数字不利于散列)。

有关此功能的大量信息,请从官方.NET存储库中阅读:

https://github.com/dotnet/corefx/issues/14354

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM