Por que é '397' usado para ReSharper GetHashCode substituição?
-
01-07-2019 - |
Pergunta
Como muitos de vocês, eu uso ReSharper para acelerar o processo de desenvolvimento. Quando você usá-lo para substituir os membros de igualdade de uma classe, o código-gen que produz para GetHashCode () se parece com:
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;
}
}
Claro que tenho alguns dos meus próprios membros lá, mas o que eu estou querendo saber é por que 397?
- EDIT:? Então, minha pergunta seria melhor redacção, há algo 'especial' sobre o 397 número primo fora de ser um número primo
Solução
Provavelmente porque 397 é um primo de tamanho suficiente para causar a variável resultado de estouro e misturar os bits do hash um pouco, proporcionando uma melhor distribuição de códigos de hash. Não há nada de especial sobre 397 que a distingue de outros primos da mesma magnitude.
Outras dicas
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow