z содержит NULL. Почему в окне вывода не отображается NULL? Это потому, что NULL не является значением?
int? x = null;
int? y = 1;
int? z = 0;
z = x + y;
Debug.WriteLine(z);
Debug.WriteLine((object)z ?? "null");
Спасибо, Оливье. Я действительно хотел знать, почему на выходе не отображается null. Просто любопытно.
Используйте источник, Люк.
Это как просить кого-то ответить на вопрос, который вы не задавали. Ответа не существует, как это могло быть сказал?
Заглянув в справочный источник Console.WriteLine(Object)
, вы увидите, что .NET вызывает System.IO.TextWriter.WriteLine(Object)
, который явно проверяет наличие null
, а затем выводит пустую строку:
public virtual void WriteLine(Object value) {
if (value==null) {
WriteLine();
}
else {
// Call WriteLine(value.ToString), not Write(Object), WriteLine().
// This makes calls to WriteLine(Object) atomic.
IFormattable f = value as IFormattable;
if (f != null)
WriteLine(f.ToString(null, FormatProvider));
else
WriteLine(value.ToString());
}
}
Debug.WriteLine(Object)
ведет себя так же, но немного сложнее. В конце концов он вызывает System.Diagnostics.TraceListener.WriteLine(Object)
.
В основном ответ заключается в том, что разработчики решили, что NULL преобразуется в пустую строку в случае int?.ToString()
.
Вы правы, выводится пустая строка. Я этого не заметил. Я бы подумал, что он напечатает NULL, потому что, когда я отлаживаю значение z, оно показывает null. В то же время null не является значением, поэтому я думаю, имеет смысл, чтобы вывод не отображал его.
YMMV. Попробуйте то же самое с String a = null;Debug.WriteLine(a);
. Остерегайтесь virtual
.
Как бы это выглядело в точности?