C# LanguageEquals und GetHashCode

Bemerkungen

Jede Implementierung von Equals muss die folgenden Anforderungen erfüllen:

  • Reflexiv : Ein Objekt muss sich selbst gleich sein.
    x.Equals(x) gibt true .

  • Symmetrisch : Es gibt keinen Unterschied, wenn ich x mit y oder y mit x vergleiche - das Ergebnis ist das gleiche.
    x.Equals(y) liefert den gleichen Wert wie y.Equals(x) .

  • Transitiv : Wenn ein Objekt einem anderen Objekt entspricht und dieses Objekt einem dritten Objekt entspricht, muss das erste Objekt dem dritten Objekt entsprechen.
    wenn (x.Equals(y) && y.Equals(z)) true zurückgibt, gibt x.Equals(z) true .

  • Konsistent : Wenn Sie ein Objekt mehrmals mit einem anderen Objekt vergleichen, ist das Ergebnis immer dasselbe.
    Aufeinanderfolgende x.Equals(y) von x.Equals(y) denselben Wert, solange die von x und y referenzierten Objekte nicht geändert werden.

  • Vergleich mit null : Kein Objekt ist gleich null .
    x.Equals(null) gibt false .

Implementierungen von GetHashCode :

  • Kompatibel mit Equals : Wenn zwei Objekte gleich sind (dh Equals gibt true zurück), muss GetHashCode für jedes GetHashCode denselben Wert zurückgeben.

  • Große Reichweite : Wenn zwei Objekte nicht gleich sind ( Equals sagt falsch), sollten die Hash-Codes mit hoher Wahrscheinlichkeit unterschiedlich sein. Perfektes Hashing ist oft nicht möglich, da eine begrenzte Anzahl von Werten zur Auswahl steht.

  • Günstig : Die Berechnung des Hash-Codes sollte in allen Fällen kostengünstig sein.

Siehe: Richtlinien zum Überladen von Equals () und Operator ==

Equals und GetHashCode Verwandte Beispiele