Warum ‚397‘ für ReSharper GetHashCode Überschreibung verwendet?
-
01-07-2019 - |
Frage
Wie viele von Ihnen, ich benutze ReSharper den Entwicklungsprozess zu beschleunigen. Wenn Sie es verwenden, um die Gleichstellung der Mitglieder einer Klasse außer Kraft zu setzen, wird der Code-gen für GetHashCode produziert () wie folgt aussieht:
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;
}
}
Natürlich habe ich einige meiner eigenen Mitglieder in dort, aber was ich wissen will, ist, warum 397?
- EDIT: Also meine Frage besser als formuliert werden würde, gibt es etwas ‚besonderes‘ über den 397 Primzahl außerhalb davon eine Primzahl sein ?
Lösung
Wahrscheinlich weil 397 eine Primzahl von ausreichender Größe ist, um die Ergebnisvariable zu veranlassen, um die Bits des Hash etwas überzulaufen und mischen, um eine bessere Verteilung des Hash-Codes bereitstellt. Es gibt nichts besonderes über 397, die es von anderen Primzahlen in der gleichen Größenordnung unterscheidet.
Andere Tipps
Ben ist richtig, die Versammlung reflektieren können Sie es nur eine Primzahl sehen sie sich entschieden haben zu verwenden.