Warum überschreiben == überschreiben muss gleich? [Duplikat]

8

C # Compiler fordert mich auf, dass ich gleich überschreiben sollte, wenn ich überschreibe ==, ich will nur wissen warum?

    
Adam Lee 16.11.2012, 10:23
quelle

3 Antworten

12

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.

    
Marc Gravell 16.11.2012 10:25
quelle
4

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) .

    
Adam Houldsworth 16.11.2012 10:25
quelle
1

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.

    
Guffa 16.11.2012 10:40
quelle

Tags und Links