我正在从我的一个旧项目中修改一些容器类(更可重用)通用等价物。我好像多年前一直 确保TKey
的{{1}}类型是Dictionary
而不是我的容器的int
类型(在这种情况下,T
为T
)。
如果我重写这个以允许使用long
,那么long
类中真正发生了什么?它是否只是将64位值类型Dictionary
强制哈希编码为32位int?也许是这样的:
TKey
答案 0 :(得分:0)
GetHashCode
方法始终返回32位int
,无论您使用何种类型或系统。这就是它的重点,我不会在那里看到任何强有力的东西。毕竟,使用任何大小的任何对象或结构作为键都没有问题。 (如果他们对GetHashCode
有一些有用的实现。)
字典可能最终会出现一些冲突,但只要哈希码在32位范围内均匀分布即可。
修改强>
所以是的,字典总是调用GetHashCode
方法,即使对于int
,它也很简单:
public override int GetHashCode()
{
return this;
}
对于long
(int64
),它看起来像这样:
public override int GetHashCode()
{
return (int) this ^ (int) (this >> 32);
}