リストオブジェクトを持つクラスのGetHashCode [複製]
-
06-07-2019 - |
質問
この質問にはすでに回答があります:
- 順序に関係なく文字列のリストのハッシュを取得 5つの答え
このようなクラスがあります:
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();
}
}
ご覧のとおり、2つのEdge
リストが同じ場合、Cycles
も同じとみなします。
今の問題は、GetHashCode()
?
Edges.GetHashCode()
を試しましたが、問題は、同じList<Cycle>
オブジェクトで順序が異なる2つのCycle
が、同じであっても異なると見なされることです。
解決
次のようなことができます:
override int GetHashCode()
{
return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}
これは単純ですが、一貫している必要があります。
所属していません StackOverflow