【发布时间】:2021-12-26 22:04:53
【问题描述】:
假设我有一个具有 Name 和 Type 属性的类,如果我将下面的哈希码存储在数据库中,我可以在另一个具有相同名称和类型的进程中比较这个哈希码吗?
哈希码是否相同?
Name.ToLower().GetHashCode() + Type.ToLower().GetHashCode();
【问题讨论】:
-
只存储实际值有什么问题?
-
不,绝对不能保证。永远不要那样做。 Read the "Warning" box in the documentation. 最上面的就是
Do not serialize hash code values or store them in databases. -
不存储
GetHashCode返回的哈希码。底层实现可能会随着时间而改变。在进程的生命周期中,它必须为相同的值返回相同的哈希码,否则字典会损坏(例如)。但是在进程生命周期之间,运行时(或库)的升级可能会改变算法并导致不同的哈希码,而您的数据库中的内容将不匹配。 -
design was demanding this← 这是什么意思?那是一个人吗? 确切的要求是什么?也许是使用哈希码但不一定是GetHashCode()?在这种情况下,您可以使用许多不同的哈希实现。 -
在 .NET Core 3.1、.NET 5 和 .NET 6 中,两次运行相同的程序,像
Console.WriteLine("Test".GetHashCode());这样简单的东西会产生不同的输出。