Что продолжается здесь?
int zero = 0;
double x = 0;
object y = x;
Console.WriteLine(x.Equals(zero)); // True
Console.WriteLine(y.Equals(zero)); // False
Здесь вы вызываете два разных метода - Double.Equals (двойной)
и Object.Equals (объект)
.Для первого вызова int
неявно конвертируется в double
, поэтому входом в метод является double
, и он выполняет проверку равенства между двумя ] двойной
с. Однако для второго вызова int
не приведение к double
, это только упаковка. Если вы посмотрите на метод Double.Equals (object)
в отражателе, первая строка будет:
if (!(obj is double))
{
return false;
}
, поэтому он возвращает false, поскольку входные данные представляют собой упакованный int
, не коробочный двойной
.
Хороший улов!