목록 개체가있는 클래스의 gethashcode [복제
-
06-07-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
나는 그런 수업이 있습니다 :
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();
}
}
당신이 볼 수 있듯이, 두 사람이라면 Edge
목록은 동일합니다 Cycles
동일합니다.
이제 문제는 구현 방법입니다 GetHashCode()
?
나는 시도했다 Edges.GetHashCode()
, 그러나 문제는 두 가지입니다 List<Cycle>
, 동일하게 Cycle
대상이지만 다른 순서는 동일해야하더라도 다른 것으로 간주됩니다.
해결책
당신은 다음과 같은 일을 할 수 있습니다.
override int GetHashCode()
{
return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}
간단하지만 일관성이 있어야합니다.
제휴하지 않습니다 StackOverflow