Mögliche Duplizieren:
C# Why can equal decimals produce unequal hash values?Decimal.GetHashCode hängt davon ab Rollier Zeros
ich auf ein Problem in meiner .NET 3.5-Anwendung (x86 oder x64 gekommen sind, habe ich versucht, beide), wobei Dezimalstellen mit einer anderen Anzahl von nachgestellten Nullen unterschiedliche Hash-Codes haben. Zum Beispiel:
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());
Ausgänge folgend auf meinem Rechner:
1085009409
1085009408
True
False
Ich nehme den Unterschied in der Hash-Codes ist bis auf die verschiedenen internen Darstellungen der beiden Zahlen durch die unterschiedlichen Skalierungsfaktoren verursacht.
Während ich das Problem umgehen kann, indem ich die abschließenden Nullen entferne, nahm ich immer an, dass GetHashCode den gleichen Wert für x und y zurückgeben sollte, wenn x == y. Ist diese Annahme falsch oder ist das ein Problem mit Decimal.GetHashCode?
EDIT: Um auf Versionen klar zu sein, verwende ich Visual Studio 2008 SP1, .NET 3.5.
Ist dies Ihr tatsächlicher Code? Dies gibt '1085009408, 1085009408, True True 'für mich zurück. - Edit: das war .NET 4, verschiedene Ergebnisse auf .NET 3.5 bestätigt. – CodeCaster
Ich habe die gleiche Ausgabe wie das OP auf .NET 3.5. @CodeCaster, in welcher Version läuft es? – Servy
Also ging ich und schaute auf die Bits der Dezimalstelle und sie sind unterschiedlich für x und y (mit. NET vor 3.5). Offensichtlich erklärt die "Equals" -Methode diesen Unterschied, aber der "GetHashCode" nicht. – Servy