C# 如何在.NET中实现哈希?

C# 如何在.NET中实现哈希?,c#,.net,vb.net,hashcode,C#,.net,Vb.net,Hashcode,可能重复: NET中的垃圾收集器移动对象,因此对象的地址不稳定。对象的GetHashCode()方法是如何实现的 谢谢 垃圾收集器为每个对象分配一个唯一的ID,这是默认的GetHashCode实现使用的ID,而不是内存位置 编辑它实际上比那复杂一点。不想误导任何人,所以你们应该更喜欢。垃圾收集器为每个对象分配一个唯一的ID,这是默认的GetHashCode实现使用的,而不是内存位置 编辑它实际上比那复杂一点。不想误导任何人,所以你们应该更喜欢。GetHashCode方法与对象的位置无关。它也是

可能重复:

NET中的垃圾收集器移动对象,因此对象的地址不稳定。对象的GetHashCode()方法是如何实现的


谢谢

垃圾收集器为每个对象分配一个唯一的ID,这是默认的GetHashCode实现使用的ID,而不是内存位置


编辑它实际上比那复杂一点。不想误导任何人,所以你们应该更喜欢。

垃圾收集器为每个对象分配一个唯一的ID,这是默认的GetHashCode实现使用的,而不是内存位置


编辑它实际上比那复杂一点。不想误导任何人,所以你们应该更喜欢。

GetHashCode方法与对象的位置无关。它也是一个虚拟方法,因此每个类型都可以根据需要定义它。它也是一个虚拟方法,因此每种类型都可以根据需要定义它。+1表示正确答案,以及您的链接:)我认为该链接没有正确的信息,至少在最新版本的.NET中没有。当我在一个对象上调用lock时,我看到它的内存使用量增加,这与创建同步块一致。但是当我调用GetHashCode时,我看不到内存使用量有任何增加,所以我不认为它会创建一个同步块。@fish:在我看来,这不是一种非常科学的测试方法。您如何知道内存增加与同步块有关,而不是与您使用Monitor.Enter时.NET创建的任何其他内容有关?@fish:在.NET 2.0中,同步块字的含义已更改,因此它可以保存同步块索引或由
GetHashCode
使用的不可变“对象标识符”(有一个位标识所表示的内容)。如果同步块字包含同步块索引,则同步块内的字将包含上述对象标识符。+1表示正确答案,以及您的链接:)我认为该链接没有正确的信息,至少在最新版本的.NET中没有。当我在一个对象上调用lock时,我看到它的内存使用量增加,这与创建同步块一致。但是当我调用GetHashCode时,我看不到内存使用量有任何增加,所以我不认为它会创建一个同步块。@fish:在我看来,这不是一种非常科学的测试方法。您如何知道内存增加与同步块有关,而不是与您使用Monitor.Enter时.NET创建的任何其他内容有关?@fish:在.NET 2.0中,同步块字的含义已更改,因此它可以保存同步块索引或由
GetHashCode
使用的不可变“对象标识符”(有一个位标识所表示的内容)。如果同步块字包含同步块索引,则同步块内的字将包含上述对象标识符。