【发布时间】:2019-11-24 12:25:57
【问题描述】:
为什么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 对象 使用相同的文本应该返回相同的哈希码值。
引用中没有关于应用程序仅运行一次的信息。 IE。我对我的案例的引用理解如下:如果两个字符串的值相等,那么即使在应用程序重新运行后哈希码也应该相等。
【问题讨论】:
标签: .net string hash clr implementation