重複の可能性:
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
ハッシュコードの違いは、スケールファクターの違いによって引き起こされる2つの数値の内部表現の違いによるものだと思います。
末尾のゼロを削除することで問題を回避できますが、x == yの場合、GetHashCodeはxとyに同じ値を返す必要があると常に想定していました。この仮定は間違っていますか、それともDecimal.GetHashCodeの問題ですか?
編集:私が使用しているバージョンを明確にするために、Visual Studio 2008 SP1、.NET3.5を使用しています。