Domanda

    

Questa domanda ha già una risposta qui:

         

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

Come puoi vedere, se due Edge liste sono uguali, allora ritengo che Cycles sia uguale.

Il problema ora è come implementare GetHashCode()?

Ho provato Edges.GetHashCode(), ma il problema è che due List<Cycle>, con lo stesso oggetto Cycle ma ordini diversi, saranno considerati diversi, anche se dovrebbero essere gli stessi.

È stato utile?

Soluzione

Potresti fare qualcosa del tipo:

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

È semplice, ma dovrebbe essere coerente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top