簡體   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