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à-dedans, mais ce que je veux savoir, c'est pourquoi 397?
- EDIT: Donc, ma question serait mieux formulée comme suit: y a-t-il quelque chose de «spécial» à propos du nombre premier 397 en dehors du fait qu'il est un nombre premier?
hash
resharper
hash-code-uniqueness
programmeur
la source
la source
Le hachage utilisé par le resharper ressemble à une variante du hachage FNV . FNV est fréquemment implémenté avec différents nombres premiers. Il y a une discussion sur le choix approprié des nombres premiers pour FNV ici .
la source