具有列表对象的类的GetHashCode

时间:2009-10-27 11:26:33

标签: c# gethashcode

我有这样一个班级:

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对象但订单不同,将被视为不同,即使它们应该相同。

1 个答案:

答案 0 :(得分:14)

您可以执行以下操作:

override int GetHashCode()
{
  return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}

这很简单,但应该是一致的。