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
相对应的哈希代码。