C# GetHashCode是否足够强大,或者是否需要另一个哈希函数?

C# GetHashCode是否足够强大,或者是否需要另一个哈希函数?,c#,.net,hash,C#,.net,Hash,我正在实现数据序列化,遇到了一个问题。 我有: 4字节字段: 数值范围为0-255 数值范围为0-4 数值范围为0-255 数值范围为0-100 和1 int字段仅为正值 我有一个想法,将所有内容转换为字节arraylenght 8或int arraylenght 2,并获得C GetHashCode方法 GetHashCode是否足够强大,可以用作此数据的标识符? 也许有人有更好的主意 EOGGetHashCode并不意味着创建唯一标识符-它的主要用途是为哈希数据结构(如HashTable)中

我正在实现数据序列化,遇到了一个问题。 我有:

4字节字段: 数值范围为0-255 数值范围为0-4 数值范围为0-255 数值范围为0-100 和1 int字段仅为正值 我有一个想法,将所有内容转换为字节arraylenght 8或int arraylenght 2,并获得C GetHashCode方法

GetHashCode是否足够强大,可以用作此数据的标识符? 也许有人有更好的主意


EOG

GetHashCode并不意味着创建唯一标识符-它的主要用途是为哈希数据结构(如HashTable)中的存储桶分配值-请参阅。当我需要一个对象的唯一标识符时,由于某种原因,该对象本身没有提供唯一标识符,我通常只使用guid。它们在C语言中很容易生成,并且保证在您所做的任何事情的范围内都是唯一的。

GetHashCode并不是用来创建唯一标识符-它的主要用途是在哈希数据结构(如HashTable)中为bucket赋值-请参阅。当我需要一个对象的唯一标识符时,由于某种原因,该对象本身没有提供唯一标识符,我通常只使用guid。它们在C语言中很容易生成,并且保证在您所做的任何事情的范围内都是唯一的。

GetHashCode纯粹用于字典中的哈希运算。由于可能的原因,您不应该在任何地方将其用作标识符。它返回Int32,例如,对于String,显然可以有超过2147483647个唯一字符串。两个不同的字符串可以具有相同的哈希代码。话虽如此,您有两种选择:

1如果需要从实际值派生标识符。例如,如果您需要快速判断新对象是否已持久化,而无需反序列化所有对象并将其与相关对象进行比较。例如,您可以在SHA1上使用


2如果您不需要从实际值派生标识符,您只需按照建议生成即可。

GetHashCode纯粹用于字典中的哈希运算。由于可能的原因,您不应该在任何地方将其用作标识符。它返回Int32,例如,对于String,显然可以有超过2147483647个唯一字符串。两个不同的字符串可以具有相同的哈希代码。话虽如此,您有两种选择:

1如果需要从实际值派生标识符。例如,如果您需要快速判断新对象是否已持久化,而无需反序列化所有对象并将其与相关对象进行比较。例如,您可以在SHA1上使用

2如果不需要从实际值派生标识符,您可以简单地按照建议生成。

int和longs的GetHashCode值 为什么不将整个结构转换为long as使用它?

int和long的GetHashCode值
为什么不将整个结构转换为一个长期使用的结构?

它们不一定是唯一的,很可能是唯一的。它们不一定是唯一的,很可能是唯一的。