GetHashCode para uma classe com um objeto de lista [duplicado]
-
06-07-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
Eu tenho essa classe a:
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 você pode ver, se duas listas Edge
são os mesmos, então eu considero o Cycles
como o mesmo.
A questão agora é como implementar a GetHashCode()
?
Eu tentei Edges.GetHashCode()
, mas o problema é que dois List<Cycle>
, com o mesmo objeto Cycle
mas as ordens diferentes, será considerado diferente, mesmo que deve ser o mesmo.
Solução
Você poderia fazer algo como:
override int GetHashCode()
{
return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}
É simples, mas deve consistente.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow