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
6
A
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.
Powiązane problemy
- 1. Scalanie typów anonimowych
- 2. C inicjalizacji # Sposób anonimowych typów
- 3. Czy istnieje sposób konkatowania typów anonimowych C#?
- 4. Dlaczego Object.Equals() zwraca false dla identycznych typów anonimowych, gdy są tworzone z różnych zestawów?
- 5. Dostęp do właściwości anonimowych typów w języku C#?
- 6. Równość MethodInfo dla Zgłaszanie typu
- 7. Czy można bezpiecznie używać GetHashCode do porównywania identycznych typów anonimowych?
- 8. Dlaczego właściwości anonimowych typów są w C# tylko do odczytu?
- 9. Wyraźne w LINQ z anonimowych typów (w VB.NET)
- 10. Powracanie anonimowych typów za pomocą interfejsu Web API
- 11. Czy istnieje sposób umieszczania atrybutów na właściwościach anonimowych typów?
- 12. Równość "WYBIERZ NAJLEPSZĄ 1" dla sygnatury?
- 13. Konfiguracja ReSharper dla wcięć metod anonimowych?
- 14. Token dostępu dla anonimowych użytkowników - JWT
- 15. Okrężnik Javascript dla oznaczania anonimowych funkcji?
- 16. Autoryzować katalog dla anonimowych użytkowników IIS 7.5?
- 17. porównaj równość obiektu shared_ptr
- 18. Biblioteka typów typów danych dla C
- 19. Jak poprawnie zastąpić równość?
- 20. typeid dla polimorficznych typów
- 21. Rozszerzanie typów dla PHP
- 22. sizeof() operator dla typów
- 23. Równość funkcji w Haskell
- 24. Równość w typach referencji
- 25. Równość/nierówność macierzy:
- 26. strukturalne Równość w F #
- 27. Logical równość w C
- 28. scalaz.Equal dla typów zależnych od ścieżki
- 29. Równość DataFrame w Apache Spark
- 30. Dokładne liczenie anonimowych głosów
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
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