由于某些原因,我有多个课程不遵守官方Equals
合同。在被覆盖的情况下,GetHashCode()
这些类只返回 0,因此它们可以在 Hashmap 中使用。
其中一些类实现了相同的接口,并且有使用该接口作为键的 Hashmaps。所以我认为每个类至少应该在GetHashCode()
.
问题是如何选择这个值。我应该简单地让第一个类返回 1,下一个类返回 2,依此类推吗?或者我应该尝试类似的东西
class SomeClass : SomeInterface {
public overwrite int GetHashCode() {
return "SomeClass".GetHashCode();
}
}
所以哈希分布更均匀?(我必须自己缓存返回的值还是微软的编译器能够对此进行优化?)
更新:不可能为每个对象返回单独的哈希码,因为 Equals 违反了合同。具体来说,我指的是这个问题。