Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Tengo esa clase:

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

Como puede ver, si dos Edge Listas son iguales, entonces considero que Cycles es igual.

El problema ahora es cómo implementar el GetHashCode()?

Intenté Edges.GetHashCode(), pero el problema es que dos List<Cycle>, con el mismo objeto Cycle pero diferentes órdenes, se considerarán diferentes, aunque deberían ser los mismos.

¿Fue útil?

Solución

Podrías hacer algo como:

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

Es simple, pero debe ser consistente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top