【问题标题】:Why is null not written to output window?为什么 null 不写入输出窗口?
【发布时间】:2018-10-11 20:50:50
【问题描述】:

z 包含 NULL。为什么输出窗口不显示 NULL?是不是因为NULL不是一个值?

int? x = null;
int? y = 1;
int? z = 0;
z = x + y;
Debug.WriteLine(z);

【问题讨论】:

  • 那会是什么样子?
  • Debug.WriteLine((object)z ?? "null");
  • 谢谢奥利维尔。我实际上想知道为什么输出不显示空值。只是好奇。
  • 使用the source,卢克。
  • 这就像要求某人回答您尚未提出的问题。答案不存在,怎么可能

标签: c# null output


【解决方案1】:

当您查看reference source of 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)

【讨论】:

  • 基本上答案是因为实现者决定在int?.ToString()的情况下将NULL转换为空字符串。
  • 你是对的,它打印一个空行。我没有注意到这一点。我原以为它会打印 NULL,因为当我调试 z 的值时,它显示为 null。同时 null 不是一个值,所以我想输出不显示它是有道理的。
  • YMMV。用String a = null;Debug.WriteLine(a); 尝试同样的事情。当心virtual
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多