我通过创建和使用哈希值来设置数据库条目的ID。 问题是,当我再次启动该应用程序时,相同原始值的哈希值不同,并且我得到了一倍的值(相同的值,不同的ID)。 在下面找到我的示例代码。启动CLI,记住给定的哈希值,然后重新开始->不同的值。
如何在每个实例中重现相同的哈希值?
static void Main(string[] args)
{
int drid = 3081;
DateTime dt = DateTime.ParseExact("2019-04-11 00:23:10", "yyyy-MM-dd HH:mm:ss", null);
string idAsString = drid.ToString() + dt.ToString();
Console.WriteLine(idAsString.GetHashCode().ToString());
Console.ReadKey();
}
答案 0 :(得分:0)
请勿执行此操作。永远不会。哈希码并不是唯一的,并且在语义上不同的对象有时会导致冲突-即,两者将产生完全相同的哈希码,从而破坏数据库。
接下来要注意的是,哈希对象很复杂。最好使哈希码与对象的生存时间保持一致,这意味着您只需在对象创建后对其进行一次计算即可-或即时忽略可变字段(因为通常每个突变都对其进行计算)将更改哈希码。
甚至还不止于此:提出足够好的哈希算法并不容易:哈希算法不可预测,而且冲突少。