Wenn Sie Gleichheit über ==
neu definieren, wird es wirklich verwirrend, wenn ==
etwas ganz anderes als .Equals
tut, und .Equals
muss das Fallback sein, denn wenn Der Typ ist zur Kompilierzeit nicht bekannt, nur .Equals
ist verfügbar. Als Konsequenz bedeutet die Definition von ==
, dass ==
, !=
, Equals
und GetHashCode
definiert wird und möglicherweise IEquatable<T>
für einige T
implementiert wird.
Weil Sie sonst zwei semantisch ähnliche Operationen haben, die möglicherweise zu unterschiedlichen Ergebnissen führen, was eine Menge Verwirrung bedeutet.
Ich bin nicht sicher, ob der Compiler Sie stoppt oder ob es nur eine Warnung ist, aber in jedem Fall ist es normalerweise gut, sicherzustellen, dass sie sich gleich verhalten.
Es gibt ungefähr so etwas mit double.NaN == double.NaN
gegen double.NaN.Equals(double.NaN)
.
Weil Sie sonst unterschiedliche Ergebnisse erhalten, je nachdem, wie Sie den Vergleich durchführen.
Doing x == y
könnte ein anderes Ergebnis geben als y == x
(wenn x
und y
unterschiedliche Typen sind). Andere Vergleiche, wie die Suche nach dem Wert in einer Liste oder die Verwendung als Schlüssel in einem Wörterbuch, verwenden den Operator ==
nicht, so dass dies überhaupt nicht funktioniert.