这个问题在这里已经有答案了:

我有一堂课:

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

它很简单,但应该一致。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top