"==" Operator verhält sich nicht wie Compiler generierte Equals () überschreiben für anonymen Typ

8

Laut MSDN :

  

Weil Equals und GetHashCode   Methoden für anonyme Typen sind definiert   in Bezug auf die Equals und GetHashcode   der Eigenschaften, zwei Instanzen von   Derselbe anonyme Typ ist nur gleich   wenn alle ihre Eigenschaften gleich sind.

Der folgende Code demonstriert jedoch, dass die vom Compiler generierte Implementierung für Equals() nicht wie erwartet funktioniert.:

%Vor%

Vermisse ich etwas? Ich schaue auf die generierte MSIL, sehe aber keinen offensichtlichen Fehler. Gibt es eine Möglichkeit für MSIL Level Debugging (neben WinDbg vielleicht)? Übersehe ich etwas?

Ich habe .NET 3.5 (VS 2008 SP1 Compiler) getestet. Zur Referenz: Hier ist die generierte Equals-Methode:

%Vor%     
Johannes Rudolph 21.02.2010, 18:07
quelle

2 Antworten

7

== ist nicht Equals() - Ich glaube, dass Ihr Code wie erwartet funktionieren sollte, wenn Sie dies tun:

%Vor%

Siehe auch diese SO-Frage .

    
Lucero 21.02.2010, 18:14
quelle
6

Lucero hat recht, aber ich möchte eine Erklärung von hinzufügen, warum das stimmt.

Bei Referenztypen in .Net soll der Operator == die Referenz Gleichheit angeben; beziehen sich zwei Variablen auf genau die gleiche Instanz eines Objekts?

Die .Equals () -Methode dagegen soll value Gleichheit anzeigen; Haben die zwei (wahrscheinlich) unterschiedlichen Instanzen eines Objekts den gleichen Wert für eine Definition von "same", die Sie normalerweise für Ihre Typen bereitstellen dürfen?

    
Joel Coehoorn 21.02.2010 18:20
quelle