Почему для переопределения ReSharper GetHashCode используется «397»?
-
01-07-2019 - |
Вопрос
Как и многие из вас, я использую ReSharper для ускорения процесса разработки.Когда вы используете его для переопределения элементов равенства класса, код, который он создает для GetHashCode(), выглядит следующим образом:
public override int GetHashCode()
{
unchecked
{
int result = (Key != null ? Key.GetHashCode() : 0);
result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
result = (result * 397) ^ ObjectId;
return result;
}
}
Конечно, у меня там есть свои участники, но я хочу знать, почему 397?
- РЕДАКТИРОВАТЬ:Итак, мой вопрос лучше было бы сформулировать следующим образом: есть ли что-то «особенное» в простом числе 397, помимо того, что оно является простым числом?
Решение
Вероятно, потому, что 397 — это простое число достаточного размера, чтобы вызвать переполнение результирующей переменной и некоторое смешивание битов хеша, обеспечивая лучшее распределение хеш-кодов.В числе 397 нет ничего особенного, что отличало бы его от других простых чисел той же величины.
Другие советы
Не связан с StackOverflow