2009-08-21 14 views
0

Disons que j'ai une classe appelée myclass.Hashsets et différentes instances de classe avec tous les membres identiques

Dans mon code, j'ai deux instances de myclass, myclass1 et myclass2. Tout à leur sujet est (public et privé) propriétés sont identiques.

Si j'essaie d'ajouter les deux à un HashSet, ajoutera-t-il les deux ou seulement un? Si elle ajoute les deux et je ne le veux pas, puis-je overidde égale dans la définition myclass et le HasSet saura comment l'utiliser?

Répondre

2

Réponse courte, cela dépend de la méthode Equals de votre objet.

réponse plus longue:

HashSet utilisera un IEqualityComparer pour déterminer si deux objets sont égaux. Si vous n'en fournissez pas, il utilisera EqualityComparer.Default; qui utilise en fait juste object.Equals (a, b) plus quelques trucs pour éviter les types de valeur de boxe.

Vérification des documents pour object.Equals(a, b): Il est effectivement en train d'effectuer a.Equals(b) après avoir vérifié les valeurs nulles. L'implémentation par défaut de object.Equals(other) consiste à vérifier uniquement l'égalité de référence (c.-à-d., Il s'agit exactement de la même instance d'un objet) mais vous pouvez ignorer cette option pour vérifier si un champ ID est identique . Remarque: lors de la substitution d'Equals, vous devez également redéfinir GetHashCode.

Si vous souhaitez modifier la façon dont HashSet détermine l'égalité sans modifier la définition de l'objet, vous pouvez lui fournir un IEqualityComparer personnalisé.