質問

    

この質問にはすでに回答があります:

         

このようなクラスがあります:

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());
}

これは単純ですが、一貫している必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top