C # Hashset contient des objets non uniques
À l'aide de cette classe
public class Foo
{
public string c1, c2;
public Foo(string one, string two)
{
c1 = one;
c2 = two;
}
public override int GetHashCode()
{
return (c1 + c2).GetHashCode();
}
}
Et ce HashSet
HashSet<Foo> aFoos = new HashSet<Foo>();
Foo aFoo = new Foo("a", "b");
aFoos.Add(aFoo);
aFoos.Add(new Foo("a", "b"));
label1.Text = aFoos.Count().ToString();
Je reçois la réponse 2, lorsque sûrement, il devrait être de 1. Est-il un moyen de résoudre ce problème de manière mes HashSet ne contient que des objets uniques?
Grâce, De La Cendre.
source d'informationauteur Ash
Vous devez vous connecter pour publier un commentaire.
La
HashSet<T>
type ultamitely utilise l'égalité pour déterminer si les 2 objets sont égaux ou non. Dans le typeFoo
vous avez seulement remplacéGetHashCode
et non l'égalité. Cela signifie que les contrôles d'égalité revient par défaut à laObject.Equals
qui utilise la référence à l'égalité. Cela explique pourquoi vous voyez plusieurs éléments dans laHashSet<Foo>
.Pour corriger cela, vous aurez besoin de remplacer
Equals
dans leFoo
type.Vous avez besoin de remplacer
Equals
méthode. SeulementGetHashCode
n'est pas assez.Vous avez besoin de redéfinir la méthode equals. La raison pour cela est que le hashcode est autorisé à entrer en collision de deux objets qui ne sont pas égaux. Sinon, ça ne marchera pas.