Pourquoi '397' est-il utilisé pour le remplacement de ReSharper GetHashCode?
-
01-07-2019 - |
Question
Comme beaucoup d’entre vous, j’utilise ReSharper pour accélérer le processus de développement. Lorsque vous l'utilisez pour redéfinir les membres d'égalité d'une classe, le code qu'il génère pour GetHashCode () ressemble à ceci:
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;
}
}
Bien sûr, certains de mes membres sont présents, mais ce que je veux savoir, c'est pourquoi 397?
- EDIT: Donc, ma question serait mieux libellée, y at-il quelque chose de "spécial" dans le nombre premier 397 en dehors de lui étant un nombre premier?
La solution
Probablement parce que 397 est un nombre premier de taille suffisante pour faire déborder la variable résultat et mélanger un peu les bits du hachage, ce qui permet une meilleure distribution des codes de hachage. 397 n’a rien de particulièrement spécial qui le distingue des autres nombres premiers de même ampleur.
Autres conseils
Ben a raison, en reflétant l’Assemblée, vous pouvez voir que c’est juste un nombre premier qu’ils ont choisi d’utiliser.