可能重复:
C# 为什么相等的小数会产生不相等的哈希值?
我在我的 .NET 3.5 应用程序(x86 或 x64,我都尝试过)中遇到了一个问题,其中尾随零数量不同的小数具有不同的哈希码。例如:
decimal x = 3575.000000000000000000M;
decimal y = 3575.0000000000000000000M;
Console.WriteLine(x.GetHashCode());
Console.WriteLine(y.GetHashCode());
Console.WriteLine(x == y);
Console.WriteLine(x.GetHashCode() == y.GetHashCode());
在我的机器上输出以下内容:
1085009409
1085009408
True
False
我认为哈希码的差异归结为由不同比例因子引起的两个数字的不同内部表示。
虽然我可以通过删除尾随零来解决这个问题,但我总是假设 GetHashCode 应该为 x 和 y 返回相同的值,如果 x == y。这个假设是错误的,还是 Decimal.GetHashCode 的问题?
编辑:要清楚我正在使用 Visual Studio 2008 SP1、.NET 3.5 的版本。