当我重新运行我的应用程序后,为什么System.String.GetHasCode`返回不同的值?]

问题描述 投票:1回答:1
为什么我重新运行应用程序后System.String.GetHasCode为什么返回不同的值?

例如我有该应用程序:

using System; namespace myprogram { class Program { static void Main(string[] args) { Console.WriteLine("foo".GetHashCode()); } } }

我两次运行该应用程序并获得了不同的输出:

user@user MINGW64 /c/Projects/dotNet/Console.NET $ dotnet run 1430600909 user@user MINGW64 /c/Projects/dotNet/Console.NET $ dotnet run 208120252

这是否意味着System.String.GetHasCode在.NET Core中实现不正确?因为根据

CLR via C#

的引用,我们具有以下约定:
具有相同值的对象应返回相同的代码。例如,两个String对象具有相同文本的应返回相同的哈希码值。

在引号中没有关于该应用程序仅运行一次的信息。即对于我的情况,我对应用程序的引用理解如下:如果两个字符串的值相等,则即使重新运行应用程序,哈希码也应相等。

为什么我重新运行应用程序后System.String.GetHasCode返回不同​​的值?例如。我有应用程序:使用系统;名称空间myprogram {类Program {静态void Main(string [] ...

.net string hash clr implementation
1个回答
1
投票
GetHashCode的结果可能取决于实现,并且不能保证在多个版本或平台之间都相同。为了安全起见,.NET Core实现使用一种称为“随机字符串哈希”的功能,该功能为每个运行的应用程序创建不同的哈希值。
© www.soinside.com 2019 - 2024. All rights reserved.