GetHashCode per una classe con un oggetto List [duplicato]
-
06-07-2019 - |
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.
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