Duplicar posibles:
C# Why can equal decimals produce unequal hash values?Decimal.GetHashCode Depende de ceros a la derecha
Me he encontrado con un problema en mi aplicación .NET 3.5 (x86 o x64, he tratado ambos) donde los decimales con un número diferente de ceros finales tienen diferentes códigos hash. Por ejemplo:
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());
da el siguiente resultado en mi máquina:
1085009409
1085009408
True
False
supongo que la diferencia en los códigos hash se ha reducido a las diferentes representaciones internas de los dos números causadas por los factores de escala diferentes.
Aunque puedo evitar el problema eliminando los ceros finales, siempre asumí que GetHashCode debería devolver el mismo valor para xey, si x == y. ¿Esta suposición es incorrecta, o es un problema con Decimal.GetHashCode?
EDITAR: Para tener claridad en las versiones, estoy usando Visual Studio 2008 SP1, .NET 3.5.
¿Es este su código real? Esto devuelve '1085009408, 1085009408, True True' para mí. - Editar: eso fue .NET 4, diferentes resultados en .NET 3.5 confirmado. – CodeCaster
Obtuve el mismo resultado que el OP en .NET 3.5. @CodeCaster, ¿en qué versión lo está ejecutando? – Servy
Así que fui y miré los bits del decimal y son diferentes para xey (con .NET pre 3.5). Claramente, el método 'Equals' explica esta diferencia, pero' GetHashCode' no. – Servy