¿Qué está pasando aquí?.NET: comportamiento extraño de double.Equals() cuando boxeo
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
¿Qué está pasando aquí?.NET: comportamiento extraño de double.Equals() cuando boxeo
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Aquí, está llamando a dos métodos diferentes - Double.Equals(double)
y Object.Equals(object)
. Para la primera llamada, int
se puede convertir implícitamente en double
, por lo que la entrada al método es double
y se realiza una comprobación de igualdad entre los dos double
s. Sin embargo, para la segunda llamada, int
es que no está siendo lanzado a double
, solo está en caja. Si usted tiene una mirada en el método Double.Equals(object)
en el reflector, la primera línea es:
if (!(obj is double))
{
return false;
}
por lo que se vuelve falsa, ya que la entrada es una caja int
, no una caja double
.
¡Buena captura!