Perché '397' viene utilizzato per l'override GetSashCode di ReSharper?
-
01-07-2019 - |
Domanda
Come molti di voi, utilizzo ReSharper per accelerare il processo di sviluppo. Quando lo usi per sovrascrivere i membri di uguaglianza di una classe, il code-gen che produce per GetHashCode () appare come:
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;
}
}
Naturalmente ho alcuni dei miei membri lì dentro, ma quello che voglio sapere è perché 397?
- MODIFICA: Quindi la mia domanda sarebbe meglio formulata in quanto, c'è qualcosa di "speciale" nel fatto che il numero primo 397 al di fuori di esso sia un numero primo?
Soluzione
Probabilmente perché 397 è un numero primo di dimensioni sufficienti per causare l'overflow della variabile risultato e mescolare in qualche modo i bit dell'hash, fornendo una migliore distribuzione dei codici hash. Non c'è nulla di particolarmente speciale nel 397 che lo distingue dagli altri numeri primi della stessa grandezza.
Altri suggerimenti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow