如果c#字典在x86上有64位TKey会发生什么?
本文关键字:什么 TKey 64位 字典 x86 上有 如果 | 更新日期: 2023-09-27 18:17:55
我正在用(可重用得多的)泛型等价物重新设计我的一个旧项目中的一些容器类。几年前,我似乎已经离开了我的方式,以确保Dictionary
的TKey
类型是int
而不是我的容器的T
类型(在这种情况下,T
是long
)。
如果我重写这个以允许使用long
,在Dictionary
类中实际发生了什么?它只是强制将64位值类型TKey
哈希编码为32位整型吗?也许像这样:
int hashKey32bit = tkey.GetHashCode();
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);
}