C# string literal GetHashCode() 评估不同的上下文?

C# string literal GetHashCode() evaluates differently given context?

所以我有一些代码失败了,因为两个字符串文字具有可以评估为同一事物的哈希码。虽然我很欣赏碰撞可能会发生,但我并不是很期待这一点。但是,在调试代码中的一个问题时,我和一位同事立即发现 window 如果我们

"55d02ProductAd".GetHashCode() == "55b0tProductAd".GetHashCode()

它将评估为 true。不理想,但并非不可能。当我们向另一位同事描述这一点时,他难以置信地编写了一个临时程序

var h1 = "55d02ProductAd".GetHashCode();
var h2 = "55b0tProductAd".GetHashCode();
Console.WriteLine(h1 == h2);

在上面,他们不评估同一件事。我们的显示器彼此相邻,我们对不同的输出感到困惑。有什么想法吗?

哈希码仅根据合同有义务在单个应用程序执行的上下文中为值生成相同的哈希值。由于您要比较 GetHashCode 的值来自完全不同的应用程序,因此没有义务让它们相等。