Quelle est votre approche pour écrire des vérifications d'égalité pour les structs
et classes
que vous créez?Vérification d'égalité C#
1) Est-ce que la "pleine" égalité de vérification exigent que beaucoup de code passe-partout (comme override Equals
, override GetHashCode
, Equals
générique, operator==
, operator!=
)?
2) Spécifiez-vous explicitement que vos classes modélisent l'interface IEquatable<T>
?
3) Est-ce que je comprends bien, qu'il n'y a aucun moyen réel pour appliquer automatiquement Equals
l'emporte, quand j'invoquer quelque chose comme a == b
et je dois toujours mettre en œuvre à la fois les membres Equals
et operator==
?
^^ Votre chaque poste est un chapitre d'apprentissage C# .. :) – Dienekes
2 suggestions mineures pour le second bloc de code: 1) Ne devriez-vous pas déplacer '(objet) left == (object) right' de' == 'vers 'Equals' générique? Donc, cela donne la vitesse (bien sûr cela dépend, mais en supposant le pire des cas) de vérifier l'égalité de référence même pour la méthode générique «Equals»? 2) vous n'avez pas besoin de la seconde null vérifier '' (objet) right == null' dans '==' comme vous le faites essentiellement dans 'Equals' générique. Voir mon article .. – nawfal
@nawfal: Je ne pense pas qu'il y ait grand intérêt à le faire dans le cas générique 'Equals' - ça va quand même être rapide dans les cas où c'est * vrai *, et pour les cas où c'est le cas * n'est pas * vrai, c'est ajouter un contrôle supplémentaire pour aucun avantage. Comme pour la partie nulle - cela nécessiterait de nouveau la vérification du type dynamique. Oui, vous pourriez argumenter pour les deux - mais je suis assez content de ce que j'ai écrit il y a deux ans ... –