Visual Studio 2017 - C # - Генерация кода - GetHashCode () - Начальное значение - Требуется объяснение - PullRequest
0 голосов
/ 08 октября 2018

Я впервые использовал функцию генерации кода для 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;
    }

1 Ответ

0 голосов
/ 08 октября 2018

В основном простые числа используются для хеширования.Однако 589741190 не является простым числом.Я не знаю, откуда вы взяли код, но я думаю, что это число выбрано случайно.(Это не означает, что это число плохо подходит для хэширования.)

Здесь можно прочитать много информации об этой функции из официального репозитория .NET:

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

...