Hashcode总是一样的?

Bar*_*ral 1 c#

我想知道HashCode是否总是一样的.

例如:

String myString = "my super string";
Int myHashCode = myString.GetHashCode();
Run Code Online (Sandbox Code Playgroud)

myHashCode始终是相同的值?在任何计算机上,任何时间,任何一切?

我是否可以信赖它,将其用作自定义唯一标识(对于相同的对象类型)

Thi*_*ilo 5

不,计算机和基本系统版本之间的值可能会发生变化.

在给定的程序运行期间,您应该只依赖它来保持不变.

文档:

GetHashCode返回的值取决于平台.它在32位和64位版本的.NET Framework上有所不同.它也可以在.NET Framework版本之间有所不同.

警告:哈希代码旨在在基于哈希表的集合中进行有效插入和查找.哈希码不是永久值.为此原因:

  • 不要序列化哈希码值或将它们存储在数据库中.

我是否可以信赖它,将其用作自定义唯一标识?

即使在单个程序运行期间,这也不起作用,因为哈希码确实发生冲突(对于不等对象,相同的哈希码).

再次引用文档:

  • 不要测试哈希码的相等性以确定两个对象是否相等.(不等的对象可以具有相同的哈希码.)要测试相等性,请调用ReferenceEquals或Equals方法.