Возможный дубликат:
С# Почему одинаковые десятичные знаки производят неравные хеш-значения?
Я столкнулся с проблемой в своем приложении .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?
EDIT: чтобы быть понятным в версиях, я использую Visual Studio 2008 SP1,.NET 3.5.