2014-05-16 16 views
6

Warum unterscheidet sich die Semantik von Equals() und ==, wenn anonyme Typen verglichen werden? Warum vergleicht man Werte und vergleicht die Referenzen? Was ist der Grund dafür?Gleichheit für anonyme Typen

Antwort

9

== nicht Equals nicht nennen, es sieht für == überladenen Operator. Da anonyme Typen den Operator == nicht überladen haben, verwendet C# einen Referenzvergleich dafür.

Aber mit Equals vergleicht es Feldwerte. Deshalb unterscheiden sich die Ergebnisse zwischen == und Equals.

Anonymous Types (C# Programming Guide)

Da die Equals und GetHashCode Methoden auf anonyme Typen sind in Bezug auf die Equals und GetHashCode Methoden der Eigenschaften definiert, zwei Instanzen desselben anonymen Typs sind nur gleich , wenn alle ihre Eigenschaften sind gleich.

+0

Vielen Dank! Unter dem Dach implementiert der C# -Compiler eine versiegelte Klasse für anonyme Typen. Der Grund, warum == Verweise vergleicht, macht für mich Sinn. Aber Equals(), die Werte für Referenztypen vergleichen, macht für mich keinen Sinn. – DBK

+0

I obwohl nur String eine Ausnahme war, wenn es darum ging, Strings mit Equals() zu vergleichen. Im Fall von Strings ist dies jedoch sinnvoll. – DBK

Verwandte Themen