Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetHashCode冲突_C#_Hashcode_Gethashcode - Fatal编程技术网

C# GetHashCode冲突

C# GetHashCode冲突,c#,hashcode,gethashcode,C#,Hashcode,Gethashcode,我知道使用HashCode作为唯一标识符不是很明智 但是假设我有两个变量在同一个哈希代码上,这是我得到它们的唯一方法 我如何区分两者之间的区别呢?文档中已经详细介绍了这一点。假设您只有哈希代码: GetHashCode方法的默认实现没有 确保不同对象的返回值唯一。此外 .NET Framework不保证 GetHashCode方法,它返回的值在 不同版本的.NET Framework。因此,违约 此方法的实现不能用作唯一对象 用于哈希目的的标识符 从中,您应该能够确定参考值是否相等 尝试使用该函

知道使用
HashCode
作为唯一标识符不是很明智

但是假设我有两个变量在同一个哈希代码上,这是我得到它们的唯一方法


我如何区分两者之间的区别呢?

文档中已经详细介绍了这一点。假设您只有哈希代码:

GetHashCode方法的默认实现没有 确保不同对象的返回值唯一。此外 .NET Framework不保证 GetHashCode方法,它返回的值在 不同版本的.NET Framework。因此,违约 此方法的实现不能用作唯一对象 用于哈希目的的标识符


中,您应该能够确定参考值是否相等


尝试使用该函数检查您是否有对同一对象的引用。

您可以发布代码吗?我不太确定“在同一个哈希代码上”是什么意思。我没有代码,这是一个一般性的问题。我读过,但假设发生了这样的事情,我不能改变它,没有办法知道这两个变量之间的差异。假设你已经使用了哈希代码,否。您可以检查对象引用是否相等,但您的问题似乎暗示您所知道的只是哈希代码。但是
Equals
用于测试两个对象是否“相似”。即使有两个对象,这也可能是真的。例如,使用
string x=“abc”;字符串y=“a”;y+=“bc”,在代码运行后,
x
y
具有相同的哈希代码
Equals
返回
true
,因为
x
y
具有相同的字符串值。但是
ReferenceEquals
返回
false
,因为
x
y
引用的是两个对象,而不是同一个对象(这两个对象实际上完全相同并不重要)。@JeppeStigNielsen您是正确的。然而,我相信提问者是想确定他是否引用了同一个对象,而不是变量的值是否相等。如果她(@HodayaShalom)真的只对对象相等感兴趣,而不是使用
x.GetHashCode()
,她可以说
RuntimeHelpers.GetHashCode(x)
。即使
x
y
是两个wrt“相等”的对象实例,这也将(以非常高的概率)给出唯一的代码<代码>等于
。另一方面,被重写的实例方法
GetHashCode()
(无参数)必须为
x
y
@JeppeStigNielsen提供一个公共哈希,这是很好的了解。我没有意识到有一个重载方法可以获取
HashCode
,它可以用来确定对象标识。这似乎是一个合适的选择。如果您只有两个对象
x
y
,则无需先检查散列码,只需直接检查
ReferenceEquals
。但是,如果您试图基于
ReferenceEquals
构建字典或哈希集或类似内容,请使用
RuntimeHelpers.GetHashCode(object)
中的哈希代码,因为这是与
ReferenceEquals
相对应的哈希代码。