1

我有两个以不同方式构建的包含所有枚举值的哈希集。

    setWithAllEnums.Equals(setToTest); // 返回假

    !(setWithAllEnums.Except(setToTest).Any()); // 返回真


为什么这些不相等?.NET 不为枚举提供 GetHashCode 吗?

4

1 回答 1

8

HashSet<T>不覆盖Equals. 即使两个哈希集包含完全相同的值,如果它们引用不同的对象,它们仍然是不相等的。你想要的方法是SetEquals

不过,蒂姆施梅尔特提出了一个很好的观点。x.SetEquals(y)也不!x.Except(y).Any()是一回事。集合 x ={1, 2}和 y ={1, 2, 3}不相等,但!x.Except(y).Any()为真。 x.SetEquals(y)相当于!x.Except(y).Any() && !y.Except(x).Any()

于 2013-04-12T15:59:34.180 回答