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.

Était-ce utile?

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
scroll top