2014-05-16 22 views
6

Dlaczego semantyka równań() i == różni się w przypadku porównania anonimowych typów? Dlaczego porównuje się wartości i inne porównania? Jaki jest tego powód?Równość dla typów anonimowych

Odpowiedz

9

== nie wywołuje Equals, wygląda na przeciążony operator ==. Ponieważ typy anonimowe nie mają przeciążonego operatora ==, więc C# używa do niego porównania referencyjnego.

Ale z Equals porównuje wartości pól. Dlatego wyniki różnią się między == i Equals.

Anonymous Types (C# Programming Guide)

Ponieważ Wynik i metody GetHashCode anonimowych rodzaju są definiowane równości i metody GetHashCode o właściwościach , dwa przykłady tego samego typu anonimowego jedynie równe Jeśli wszystko ich właściwości są równe.

+0

Dzięki! Pod maską kompilator C# implementuje zamkniętą klasę dla typów anonimowych. Powód, dla którego == porównuje odniesienia, ma dla mnie sens. Ale porównanie wartości (Equals) dla typów referencyjnych nie ma dla mnie większego sensu. – DBK

+0

I choć tylko ciąg był wyjątkiem, jeśli chodzi o porównywanie ciągów za pomocą równań(). Jednak w przypadku łańcuchów ma to sens. – DBK

Powiązane problemy