почему легко; думайте о том, что вы написали на самом деле так:
object o = null;
Console.WriteLine(("Is null: " + o) == null); // returns false
Это тестирование "Is null: " + o
против null
, которое всегда будет false
. Это связано с правилами приоритета операторов, где +
предшествует ==
.
Вы должны явно применять парены, чтобы убедиться, что они работают так, как вы хотите:
Console.WriteLine("Is null: " + (o == null)); // returns true
Как отмечено в комментариях Джим Роудс :
Это одна из нескольких причин, по которым вы ВСЕГДА должны использовать круглые скобки и никогда не полагаться на правила приоритета компилятора.
Я заметил, что согласен; что я даже не пытаюсь самостоятельно запомнить правила приоритета операторов, вместо этого я все время говорю с паренсом. Кроме того, я полагаю, что это также одна из причин быть очень осторожным, полагаясь на неявное преобразование типов и / или методы с множественными перегрузками.
Я также хотел бы отметить, что мне действительно что-то нравится Ravadre отмечено в их ответе ; о том, почему был напечатан только «False», а не весь текст, который вы пытались напечатать.