2009-01-04 9 views
12

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

15

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:

http://msdn.microsoft.com/en-us/library/ms131187.aspx

+0

comment est-ce différent IComparable – leora

+0

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

+0

est .Equals() identique à == ?? – leora

2

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é.

0

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

+0

Implémenter ou remplacer ? –