【发布时间】:2013-05-01 20:27:51
【问题描述】:
C# HashSet 定义了许多集合运算符,例如需要将元素与另一个集合进行比较的 exceptWith(...)。这些方法是基于它们正在比较的对象的 HashCode 工作,还是使用 Equals()?
【问题讨论】:
-
两者都有!对象首先通过哈希码进行比较,然后通过
Equals()(如果哈希码匹配)进行比较。 -
只使用
GetHashCode显然会被破坏。GetHashCode有(实际的)冲突。如果您使用较大的加密哈希(例如 SHA-256)而不是低质量的 32 位哈希,则依赖哈希相等是可以的。