Почему это просто; думать о том, что вы написали, как на самом деле быть этим:
object o = null;
Console.WriteLine(("Is null: " + o) == null); // returns false
Это испытание "Is null: " + o
против null
, который всегда будет false
. Это связано с правилами приоритета оператора, где +
- до ==
.
Вы должны явно применить скобки, чтобы убедиться, что он работает, как вы хотите:
Console.WriteLine("Is null: " + (o == null)); // returns true
Как отмечалось в комментариях по Jim Rhodes:
Это одна из нескольких причин, почему вы должны всегда использовать круглых скобок и никогда не полагаться на правила приоритета компилятора.
Я отметил, что согласен; что я даже не попробуй, чтобы запомнить правила приоритета оператора самостоятельно, а не явным с парнером все время. Я также предполагаю, что это также одна из причин быть очень осторожным, полагаясь на неявное преобразование типов и/или методы с множественными перегрузками.
Я также хотел бы указать, что мне очень нравится Ravadre, указанная в their answer; о том, почему был напечатан только «Ложный», а не весь текст, который вы пытались напечатать.
Это одна из нескольких причин, почему вы должны ВСЕГДА использовать круглые скобки и никогда не полагаться на правила приоритета компилятора. –
@JimRhodes Действительно; Я даже не пытаюсь самостоятельно запомнить правила приоритета оператора. Если это может быть * возможно, проблема, я явно указываю приоритет в своем коде. Этот пример - * также * случай, показывающий, что использование явного преобразования типов может вызвать путаницу. –