Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich habe eine solche Klasse:

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();
        }
} 

Wie Sie sehen können, wenn zwei Edge Listen gleich sind, dann halte ich die Cycles als das gleiche.

Die Frage ist nun, wie die GetHashCode() zu implementieren?

Ich habe versucht Edges.GetHashCode(), aber das Problem ist, dass zwei List<Cycle>, mit dem gleichen Cycle Objekt aber unterschiedlichen Aufträgen, anders angesehen werden, auch wenn sie das gleiche sein sollen.

War es hilfreich?

Lösung

Sie etwas tun könnten, wie:

override int GetHashCode()
{
  return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}

Es ist einfach, aber sollte konsistent.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top