可能重复:
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
我认为哈希码的差异是由于不同比例因素引起的两个数字的不同内部表示所致。
虽然我可以通过去掉尾随零来解决这个问题,但我一直认为如果x == y,则GetHashCode应该返回相同的值。这种假设是错误的吗,或者这是Decimal.GetHashCode的问题?
编辑:明确版本,我正在使用Visual Studio 2008 SP1,.NET 3.5。
1085009408, 1085009408, True True
。- 编辑:那是.NET 4,在.NET 3.5上有不同的结果得到确认。 - CodeCaster