Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有两个以不同方式构建的包含所有枚举值的哈希集。
setWithAllEnums.Equals(setToTest); // 返回假 !(setWithAllEnums.Except(setToTest).Any()); // 返回真
为什么这些不相等?.NET 不为枚举提供 GetHashCode 吗?
HashSet<T>不覆盖Equals. 即使两个哈希集包含完全相同的值,如果它们引用不同的对象,它们仍然是不相等的。你想要的方法是SetEquals。
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()。
x.SetEquals(y)
!x.Except(y).Any()
{1, 2}
{1, 2, 3}
!x.Except(y).Any() && !y.Except(x).Any()