引用 Eric Lippert的 GetHashCode 指南和规则:
规则:GetHashCode 的消费者不能依赖它随着时间的推移或跨应用程序域而保持稳定
假设您有一个 Customer 对象,该对象具有一堆字段,例如名称、地址等。如果您在两个不同的进程中创建两个具有完全相同数据的此类对象,则它们不必返回相同的哈希码。如果您在星期二在一个进程中创建这样的对象,然后将其关闭,然后在星期三再次运行该程序,则哈希码可能会有所不同。
这在过去曾咬人。System.String.GetHashCode 的文档特别指出,两个相同的字符串在不同版本的 CLR 中可以具有不同的哈希码,事实上它们确实如此。不要在数据库中存储字符串哈希并期望它们永远相同,因为它们不会。
那么创建可以存储在数据库中的字符串的 HashCode 的正确方法是什么?
(请告诉我,我不是第一个在我编写的软件中留下这个错误的人!)