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 [] ...
GetHashCode
的结果可能取决于实现,并且不能保证在多个版本或平台之间都相同。为了安全起见,.NET Core实现使用一种称为“随机字符串哈希”的功能,该功能为每个运行的应用程序创建不同的哈希值。