J'ai une telle classe:GetHashCode pour une classe avec une liste d'objets
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();
}
}
Comme vous pouvez le voir, si deux listes Edge
sont les mêmes, alors je considère le Cycles
comme le même. Le problème est maintenant comment implémenter le GetHashCode()
?
J'ai essayé Edges.GetHashCode()
, mais le problème est que deux List<Cycle>
, avec les mêmes objets Cycle
mais différents ordres, seront réputées avoir été différentes, même si elles doivent être les mêmes.
'Except' est une opération de définition qui ne vous donne que les éléments distincts. Si des éléments distincts sont tout ce qui compte alors vous pouvez utiliser 'HashSet' est un meilleur choix. Il a 'HashSet .CreateSetComparer' qui fait tout cela gratuitement. Dans tous les cas, si vous voulez comparer les éléments distincts uniquement pour l'égalité, alors "! Any" est plus performant que "Count == 0". Comme '! List1.Except (list2) .Any() && ! List2.Except (liste1) .Any();'. –
nawfal