我有两个哈希集,我以不同的方式构造,包含所有枚举值。
setWithAllEnums.Equals(setToTest); // Returns false !(setWithAllEnums.Except(setToTest).Any()); // Returns True
为什么这些不相同? .NET没有为枚举提供GetHashCode吗?
答案 0 :(得分:7)
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()
。