Question

Disons que j'ai une classe appelée MyClass.

Dans mon code, j'ai deux cas de MyClass, MyClass1 et MaClasse2. Tout sur les propriétés est (publiques et privées) sont identiques.

Si j'essaie d'ajouter deux d'entre eux à un HashSet l'ajoutera à la fois ou un seul? Si elle ajoute à la fois et je ne veux pas que cela, je peux overidde égale dans la définition myclass et le Hasset savent comment l'utiliser?

Était-ce utile?

La solution

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

Deuxième réponse:

HashSet utilisera un IEqualityComparer pour déterminer si deux objets sont égaux. Si vous ne fournissez pas un, il utilisera EqualityComparer.Default; qui a effectivement utilise juste Object.equals (a, b) plus quelques trucs pour éviter les types de valeur de boxe.

Vérification de la documentation pour object.Equals(a, b). Il est effectivement en train d'exécuter a.Equals(b) après avoir vérifié les valeurs NULL

La mise en œuvre par défaut de object.Equals(other) est de vérifier que l'égalité de référence (à savoir, ils sont la même instance exacte d'un objet) mais vous pouvez remplacer ce pour effectuer tous les contrôles que vous voulez, comme la vérification si un champ d'identification est identique. Remarque, lors de la substitution que vous avez Égal également de passer outre GetHashCode.

Si vous voulez changer la façon dont HashSet détermine l'égalité sans modifier la définition de l'objet que vous pouvez fournir une coutume IEqualityComparer place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top