我有人使用 Type.GetHashCode 就好像它是主键一样。我认为这是一个可怕的想法,但我想知道是否有某种记录的特殊情况表明没有两种类型具有相同的哈希码。
GetHashCode 没有任何保证,除了它可能会随机分布,不是唯一的。文档特别提到:
GetHashCode 方法的默认实现才不是
保证不同对象的返回值唯一。此外,
.NET Framework 不保证默认实现
GetHashCode方法,它返回的值将是相同的
.NET Framework 的不同版本之间。因此,
此方法的默认实现不得用作唯一的
用于散列目的的对象标识符。 ...如果两个对象比较不相等,则两个对象的 GetHashCode 方法不必返回不同的值.
鼓励随机分布以避免哈希冲突(慢字典):
为了获得最佳性能,哈希函数必须生成随机数
所有输入的分布。
保存 GetHashCode 的结果并基于此保存的值做出任何决策也是一个非常糟糕的主意。同一对象可能会在下一次应用程序执行时返回不同的哈希代码:
对象的 GetHashCode 方法必须始终返回相同的值
哈希码只要没有修改对象状态即可
确定对象的 Equals 方法的返回值。注意
这仅适用于应用程序的当前执行,并且
那一个如果运行应用程序,可以返回不同的哈希码
再次.
CLR本身changedGetHashCode 实现 .NET 1 和 .NET 2 之间的字符串,并针对 32 位和 64 位版本使用不同的哈希算法。
From GetHashCode 的指南和规则:
GetHashCode 的设计目的只有一件事:平衡哈希表。做
不要将其用于其他任何用途。
你应该看看加密散列如果你想almost基于对象值的唯一哈希码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)