c# – 我可以使用GetHashCode()进行所有字符串比较吗?
我想基于要搜索的对象和一些搜索设置来缓存一些搜索结果.
但是:这会创建相当长的缓存键,我想我会为它创建一个快捷方式,我想我会使用GetHashCode(). 所以我想知道,GetHashCode()总是生成一个不同的数字,即使我有很长的字符串或只有这个不同:’?’而不是’a’ 我尝试了一些字符串,似乎答案是肯定的,但不了解GetHashCode()行为并没有给我真正的感觉,我是对的. 而且因为当你没有准备好时(客户端正在查看错误搜索的缓存结果),它会突然出现,我想确定… 编辑:如果MD5可以工作,我可以改变我的代码不使用GetHashCode的课程,目标是获得一个短的(呃)字符串比原来(> 1000个字符) 解决方法
你不能指望GetHashCode()是唯一的.
有一篇很好的文章调查了http://kenneththorman.blogspot.com/2010/09/c-net-equals-and-gethashcode.html可能发生碰撞的可能性.调查结果是“GetHashCode()调用不同字符串返回相同哈希码的最小次数是在565次迭代之后,获得哈希码冲突之前的最大迭代次数是296390次迭代.” 因此,您可以了解GetHashCode实现的合同,以下是来自 哈希函数必须具有以下属性: >如果两个对象比较相等,则每个对象的GetHashCode方法必须返回相同的值.但是,如果两个对象的比较不相等,则两个对象的GetHashCode方法不必返回不同的值. C#编译器团队的Eric Lippert在http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/的博客上解释了GetHashCode实现规则的基本原理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |