我正在实施数据序列化,但我遇到了一个问题。 我有:
我有一个想法是将所有字节数组(lenght 8)或int数组(lenght 2)传递给C#GetHashCode方法
GetHashCode强大到足以用作此数据的标识符吗? 或者有人有更好的想法,也许?
EOG
答案 0 :(得分:3)
GetHashCode并不是要创建唯一标识符 - 它的主要用途是将值分配给散列数据结构中的存储区(如HashTable) - 请参阅http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/。当我需要一个对象的唯一标识符,并且由于某种原因,对象本身不提供一个,我通常会回到GUID。它们在C#中生成是微不足道的,并保证在您正在做的任何事情范围内都是唯一的。
答案 1 :(得分:1)
GetHashCode纯粹用于字典中的散列。您不应该在任何地方使用它作为标识符,因为可能hash collisions。它返回Int32,对于String,例如,显然可以有超过2,147,483,647个唯一字符串。两个不同的字符串可以具有相同的哈希码。说过你有两个选择:
1)如果您需要从实际值派生您的标识符。例如,如果您需要快速判断是否已经保留了新的Object而未反序列化所有对象并将它们与相关对象进行比较。例如,您可以在SHA1上使用ComputeHash。
答案 2 :(得分:0)
int和long的GetHashCode()
值(< int.MaxValue)与值相同,但对于数组,值不稳定。所以不要使用它。
为什么不将整个结构转换为long
使用它?