Comme beaucoup d'entre vous, j'utilise ReSharper pour accélérer le processus de développement. Lorsque vous l'utilisez pour remplacer les membres d'égalité d'une classe, le code-gen qu'il produit pour GetHashCode () ressemble à:
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, j'ai certains de mes propres membres là-bas, mais ce que je veux savoir, c'est pourquoi 397?
Probablement parce que 397 est un nombre premier de taille suffisante pour provoquer un débordement de la variable de résultat et mélanger quelque peu les bits du hachage, offrant une meilleure distribution des codes de hachage. Il n'y a rien de particulièrement spécial dans le 397 qui le distingue des autres nombres premiers de même ampleur.
Ben a raison, reflétant l'Assemblée, vous pouvez voir que c'est juste un nombre premier qu'ils ont choisi d'utiliser.