【发布时间】:2009-05-07 15:24:42
【问题描述】:
由于某些原因,我有多个课程不遵循官方Equals 合同。在被覆盖的GetHashCode() 中,这些类只返回 0,以便它们可以在 Hashmap 中使用。
其中一些类实现了相同的接口,并且有使用此接口作为键的 Hashmap。所以我认为每个类至少应该在GetHashCode() 中返回一个不同的(但仍然是不变的)值。
问题是如何选择这个值。我应该简单地让第一个类返回 1,下一个类返回 2,依此类推吗?或者我应该尝试类似的东西
class SomeClass : SomeInterface {
public overwrite int GetHashCode() {
return "SomeClass".GetHashCode();
}
}
所以哈希分布更均匀? (我必须自己缓存返回值还是微软的编译器能够优化这个?)
更新:不可能为每个对象返回单独的哈希码,因为 Equals 违反了合同。具体来说,我指的是this problem。
【问题讨论】:
标签: c# hash equals gethashcode