我们目前正在广泛使用GetHashCode方法将散列码存储在数据库中以跟踪唯一项目。 MSDN在这里有一个可怕的条目使用ToHashCode将散列存储在数据库中?
“GetHashCode方法的默认实现不保证不同对象的唯一返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,并且值它返回的结果在不同版本的.NET Framework之间是相同的,因此,此方法的默认实现不能用作用于散列目的的唯一对象标识符。“
我们一直在使用这种方法几年没有问题。我们是否应该担心,如果是的话,那么更好的方法是什么?
详细说明,数据来自外部来源。我们需要两到三个字符串字段,将它们一起添加到一个新字符串中,然后使用GetHashCode关闭该字符串。
挪用GetHashCode在调用之间返回不同的值是一个可怕的想法,并且会打破比修复更多的问题。选项2将您从-1保存。 – spender 2010-10-28 02:09:39
嗯...似乎很奇怪,因为MSDN建议覆盖GetHashCode以确保它返回唯一值。 – 2010-10-28 02:16:04
但每次都必须为对象返回相同的唯一值。每次生成一个新的Guid都会违反该规则。弄清楚如何每次检索相同的Guid比使用确定性算法为复杂对象构建唯一值的工作要多得多。 – tvanfosson 2010-10-28 02:22:18