【发布时间】:2011-07-06 12:19:15
【问题描述】:
引用 Eric Lippert 的 Guidelines and rules for GetHashCode 的话:
规则:GetHashCode 的消费者不能依赖它随着时间的推移或跨应用程序域而保持稳定
假设您有一个 Customer 对象 有一堆字段,例如名称, 地址等。如果你做两个 这样的对象完全一样 数据在两个不同的过程中,他们 不必返回相同的哈希 代码。如果你在 周二在一个进程中,关闭它, 并再次运行程序 星期三,哈希码可以是 不同。
这在过去曾咬人。 的文档 System.String.GetHashCode 注释 特别是两个相同的 字符串可以有不同的哈希码 在不同版本的 CLR 中,以及 事实上他们确实如此。 不要在数据库中存储字符串哈希并期望它们永远相同,因为它们不会。
那么创建可以存储在数据库中的字符串的 HashCode 的正确方法是什么?
(请告诉我,我不是第一个在我编写的软件中留下这个错误的人!)
【问题讨论】:
-
好吧,我从不依赖GetHashCode,因为我知道,我实现这个方法是多么的草率。我相信其他人并没有做得更好...... ;-)
-
您不是第一个在您编写的软件中留下此错误的人。
-
Dbase 引擎已经非常擅长散列字符串。只需为该列创建一个索引。
-
@Hans,见stackoverflow.com/questions/2730865/…,不要假设字符串存储在单个表中。
-
为什么这很重要?无论如何,您都会索引连接中使用的列以使查询快速。在我看来,您正在尝试完成 dbase 引擎的工作。
标签: c# .net database hashcode gethashcode