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.:
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% ==
ist nicht Equals()
- Ich glaube, dass Ihr Code wie erwartet funktionieren sollte, wenn Sie dies tun:
Siehe auch diese SO-Frage .
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?
Tags und Links .net c# compiler-construction anonymous-types