Que se passe-t-il ici?.NET: comportement étrange de double.Equals() lors de la boxe
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Que se passe-t-il ici?.NET: comportement étrange de double.Equals() lors de la boxe
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Ici, vous appelez deux méthodes différentes - Double.Equals(double)
et Object.Equals(object)
. Pour le premier appel, int
est implicitement convertible en double
, de sorte que l'entrée de la méthode est double
et qu'elle effectue un contrôle d'égalité entre les deux double
s. Toutefois, pour le deuxième appel, le int
est et non étant casté à double
, il est seulement encadré. Si vous avez un oeil à la méthode Double.Equals(object)
dans le réflecteur, la première ligne est la suivante:
if (!(obj is double))
{
return false;
}
donc il retourne faux, comme l'entrée est une int
en boîte, pas double
en boîte.
Bonne prise!