Si j'ai un objet complexe, quel est le meilleur modèle de pratique pour écrire le code pour comparer 2 instances pour voir si elles sont les mêmesComparaison de deux objets.
Répondre
Implémentez l'interface IEquatable. Cela définit une méthode généralisée qu'un type de valeur ou une classe implémente pour créer une méthode spécifique au type pour déterminer l'égalité des instances. N'oubliez pas de surcharger Equals (object). Plus d'informations ici:
Je pense que la réponse est très dépendante problème. Par exemple, vous pouvez considérer les objets comme égaux uniquement si toutes leurs propriétés sont équivalentes. Ce serait peut-être le cas lorsque chaque objet n'a pas de propriété d'identification unique. S'il existe une propriété (ou des propriétés), par exemple un ID ou un ID et une version, qui identifie de manière unique chaque objet du type, vous pouvez uniquement effectuer une comparaison en fonction de cette propriété (ou de ces propriétés).
Le motif de base, cependant, devrait être quelque chose comme:
if their references are equal (includes both null)
return true
else if one object is null
return false
else
return value based on relevant properties
Notez que si vous remplacez le Égale opérateur, vous aurez également besoin de passer outre GetHashCode() afin que les Codes de hachage pour des objets équivalents sont identiques. Cela garantira que les structures de données qui utilisent le code de hachage pour déterminer les clés en double fonctionnent correctement lorsque l'objet est utilisé en tant que clé.
Puisque vous avez mentionné un objet complexe, assurez-vous que tous les objets composites de l'objet complexe sont égaux (Object) comme mentionné par tvanfosson. Enfin l'implémentation est égale à l'objet complexe en tirant parti de l'égalité de tous les objets composites
Implémenter ou remplacer ? –
- 1. Comparaison de deux schémas XML
- 2. Comparaison de deux collections d'objets
- 3. deux dates Comparaison mysql
- 4. Comparaison entre les objets Javascript
- 5. Date de comparaison entre deux dates?
- 6. Comparaison de deux matrices dans Matlab
- 7. Ms Access Comparaison de deux jeux d'enregistrements
- 8. Problème dans la comparaison de deux chaînes ...!
- 9. NumPy: Comparaison d'éléments dans deux tableaux
- 10. Fusion de deux objets de domaine
- 11. Comparaison de deux tables de base de données
- 12. Modèle partagé entre deux objets
- 13. Comparaison de la structure de dossiers dans deux environnements
- 14. Combinaison de deux objets JSON dans un
- 15. Deux objets de domaine dans une vue
- 16. C# Type de comparaison d'objet
- 17. Subsonic: Comparaison de deux colonnes au lieu d'un paramètre d'entrée
- 18. Comparaison de deux fichiers xml dans Objective-C
- 19. Comparaison des objets std :: tr1 :: function <>
- 20. comparaison/intersection des critères de comparaison
- 21. deux objets connexes Insertion échouent dans SQLAlchemy
- 22. construire deux objets shared_ptr du même pointeur
- 23. comparaison de schéma db
- 24. Problème de comparaison Oracle
- 25. MbUnit: Comparaison d'instances d'objets distincts
- 26. Comparaison d'objets élégants
- 27. filtre de comparaison jQuery
- 28. Comparer deux objets avec une vérification de null
- 29. Quelle est la meilleure façon de diviser deux objets TimeSpan?
- 30. comparaison xml
comment est-ce différent IComparable – leora
IEquatable vous dira seulement s'ils sont identiques ou non. IComparable vous donnera un ordre relatif. Pour les objets qui ne sont pas classés, mais qui sont équitables (images, par exemple), vous ne pouvez pas utiliser IComparable. – tvanfosson
est .Equals() identique à == ?? – leora