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
  • ?
War es hilfreich?

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.

Der Hash, dass ReSharper verwendet sieht aus wie eine Variante des FNV Hash. FNV wird häufig mit verschiedenen Primzahlen umgesetzt. Es gibt eine Diskussion über die geeignete Wahl von Primzahlen für FNV hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top