.net 用于比较和相等的GetHashCode

.net 用于比较和相等的GetHashCode,.net,hash,.net,Hash,我有一个程序,我应该确保URL存在或不存在,如果数据库中存在,我应该选择ID,如果没有,我应该将其插入数据库 我有一个问题,GetHashCode是将哈希代码保存在数据库中并比较哈希代码的好方法吗?我能确定2个或更多的URL具有相同的哈希代码没有例外吗?如果没有,安装的.NET Framework是否不同 谢谢不,这不是一个好主意-因为GetHashcode()可能会在下一个.net framework版本中返回不同的结果。看 不要使用开箱即用的GetHashCode(),它是一个星期,可能会在

我有一个程序,我应该确保URL存在或不存在,如果数据库中存在,我应该选择ID,如果没有,我应该将其插入数据库

我有一个问题,GetHashCode是将哈希代码保存在数据库中并比较哈希代码的好方法吗?我能确定2个或更多的URL具有相同的哈希代码没有例外吗?如果没有,安装的.NET Framework是否不同


谢谢

不,这不是一个好主意-因为GetHashcode()可能会在下一个.net framework版本中返回不同的结果。看

  • 不要使用开箱即用的GetHashCode(),它是一个星期,可能会在下一个版本中更改
  • 使用您自己的哈希函数。
    • 不要使用
  • 您需要处理转义,即“A B”==“A%20B”
  • <> LI>您还需要考虑用例敏感性的问题。
    不要将其用作标识-GetHashCode可能会为不同的字符串生成相同的值


    GetHashCode结果是一个int32,因此它只能存储4e9个不同的值。由于网页的数量已经接近这些值(),您几乎可以确定某些不同的URL会生成相同的哈希。

    如果您确实想确保不存在重复的URL,您应该只存储URL。使用散列可以做的唯一一件事是,如果URL可能存在,将其用作第一个指示符,但基本上,您可以手动执行索引,而一个好的DB可以为您执行此操作


    除了如何存储外,还有不同的方法用不同的字符串表示相同的URL,最好指定URL的唯一性?

    Tnx,那么URL的MD5如何呢?我认为MD5是可以的-但是记住在使用MD5或任何其他哈希函数Tnx之前要规范化URL,MD5用于URL如何?仅用于加密用途-在这种情况下应该绝对没有问题如果URL的使用来自用户,这是一个问题,他们使用会在数据库中产生冲突,而不是让google.com转到mybadsite.com/this\u URL\u可以使用与\u goole\com.htm相同的\u MD5\u哈希\u,http://%77%77%77%2e%67%6f%6f%67%6c%65%2e%63%6f%6d,并且都指向同一个页面,所以您希望它有多独特?这并不重要,我只需要数据库中的一个ID,以确保如果我有链接,那么我就有一个ID,而不是2个或更多ID。我提供了5个不同的URL,每个人都应该有一个唯一的ID还是应该有相同的ID?他们可以有自己的ID,这不是imp。