我想根据要搜索的对象和一些搜索设置缓存一些搜索结果。
然而:这会创建一个很长的缓存键,我想我会为它创建一个快捷方式,我想我会使用 GetHashCode()
。
所以我想知道,即使我的字符串很长或仅此不同,GetHashCode()
也会始终生成一个不同的数字吗?
我尝试了一些字符串,似乎答案是肯定的,但不理解 GetHashCode()
行为并没有给我真实的感觉,我是对的。
并且因为它是当你没有准备好时会弹出的那些东西之一(客户端正在查看错误搜索的缓存结果)我想确定......
编辑:如果 MD5 可以工作,我可以更改我的代码以不使用 GetHashCode 当然,目标是获得比原始字符串更短的字符串(> 1000 个字符)
最佳答案
您不能指望 GetHashCode()
是唯一的。
有一篇出色的文章调查了http://kenneththorman.blogspot.com/2010/09/c-net-equals-and-gethashcode.html上可能发生的碰撞的可能性。调查结果是“调用 GetHashCode() 为不同字符串返回相同哈希码的最少次数是在 565 次迭代之后,而在发生哈希码冲突之前的最高迭代次数是 296390 次迭代。”
为了让您能够理解 GetHashCode
实现的契约,以下是 Object.GetHashCode()
的 MSDN 文档的摘录:
散列函数必须具有以下属性:
C# 编译器团队的 Eric Lippert 在他的博客 http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/ 上解释了
GetHashCode
实现规则的基本原理。关于c# - 我可以将 GetHashCode() 用于所有字符串比较吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12366828/