GetHashCode pour une classe avec un objet de liste [dupliquer]
-
06-07-2019 - |
Question
Cette question a déjà une réponse ici:
J'ai une telle classe:
public class Cycle
{
public List<int> Edges
{
get;
private set;
}
public override bool Equals(object obj)
{
Cycle cycle = (Cycle)obj;
var list1 = cycle.Edges;
var list2 = Edges;
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
return same;
}
public override int GetHashCode()
{
// return Edges.GetHashCode();
}
}
Comme vous pouvez le constater, si deux Edge
listes sont identiques, je considère que Cycles
est identique.
Le problème est maintenant de savoir comment implémenter le GetHashCode()
?
J'ai essayé Edges.GetHashCode()
, mais le problème est que deux List<Cycle>
, avec le même Cycle
objet mais avec des ordres différents, seront considérés comme différents, même s'ils doivent être identiques.
La solution
Vous pouvez faire quelque chose comme:
override int GetHashCode()
{
return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}
C’est simple, mais cohérent.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow