Was ist hier los?.NET: Seltsames Verhalten von double.Equals() beim Boxen
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Was ist hier los?.NET: Seltsames Verhalten von double.Equals() beim Boxen
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Hier Sie anrufen zwei verschiedene Methoden - Double.Equals(double)
und Object.Equals(object)
. Beim ersten Aufruf ist int
implizit in double
konvertierbar, daher ist die Eingabe für die Methode double
und es wird eine Gleichheitsprüfung zwischen den beiden double
s durchgeführt. Für den zweiten Anruf wird die int
jedoch nicht zu einer double
umgewandelt, es wird nur verpackt. Wenn Sie einen Blick auf die Double.Equals(object)
Verfahren in Reflektor haben, die erste Zeile ist:
if (!(obj is double))
{
return false;
}
so falsch es zurückkehrt, da der Eingang eine Box int
, kein boxed double
.
Guter Fang!