我只是浪费了几个小时的调试才意识到与.NET相反,在.NET Core中,每次运行代码时,GetHashCode都会返回不同的值.我完全理解这个的基本原理.依赖哈希码值是一个非常糟糕的想法(比如序列化它们).我甚至记得微软(在Core之前)的.NET内部版本会改变每个版本的GetHashCode的行为,这样就没有人会对它感到太满意了.
说完这一切之后,我正在调试大量使用GetHashCode的复杂代码.我知道这个bug是我自己做的,与GetHashCode无关,但每次运行它都会失败.很烦人.有没有办法强制GetHashCode像在.NET中一样(我在调试时),而不必编写自己的哈希函数,并且必须在代码中的任何地方替换它?
根据文档,只有框架的变化才会改变哈希结果。我也偶然发现了这一点。我的解决方案是创建我自己的哈希算法。只花了几分钟,因为我不需要任何花哨的东西。
private static int GetSimpleHash(string s)
{
return s.Select(a => (int)a).Sum();
}
Run Code Online (Sandbox Code Playgroud)
在旁注中,我为 dotnet core 1.1 提交了一个错误。(string).GetHashCode()在这里。
更新
由于框架或域,哈希值可能会发生变化。这意味着同一程序的两次后续运行可能会返回不同的结果。
唉,我的错误报告没有实际意义,而是改为文档更新。
更新更新
文档已更新,使其更加清晰。
Fra*_*nin -5
我发现让 string.GetHashCode 在多次执行中返回可预测值的实用解决方案只是切换回经典的 .NET (4.6)。由于我的代码没有任何特定于 .NET Core 的内容,因此我唯一要做的工作就是创建一个新项目。我在 .NET 4.6 下调试了代码,修复了错误并切换回 Core。
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |