使用Enum类型的HashSet进行奇数相等?

时间:2013-04-12 15:57:19

标签: c# equality hashset

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

    setWithAllEnums.Equals(setToTest); //  Returns false

    !(setWithAllEnums.Except(setToTest).Any());  //  Returns True


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

1 个答案:

答案 0 :(得分:7)

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

蒂姆·施梅特尔(Tim Schmelter)提出了一个很好的观点。 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()