这 ??运算符的意思是“如果此运算符之前的事物不为空,则使用它,否则使用此运算符之后的事物”。
您可能会感到困惑的是什么构成了“此运算符之前的事物”。在你的情况下,这就是全部:
"Some Text" + System.Environment.NewLine + varOne.ToString()
那永远不会为空。即使 varOne.ToString() 返回 null(这将是 varOne 类中的一个错误,因为 ToString() 永远不应返回 null),将字符串与 null 连接的结果是原始字符串。绝对没有上述情况可能导致 null 的情况。
现在,varOne可能为空,在这种情况下你会得到一个异常。这可能是你认为你要防范的,但事实并非如此。如果这真的是你想要的,你需要这样的东西:
"Some Text" + System.Environment.NewLine +
(varOne != null ? varOne.ToString() : string.Empty) + System.Environment.NewLine +
varTwo.ToString()...
这会检查 varOne 是否为空,如果不是则使用 varOne.ToString,如果是则回退到 string.Empty。
请注意,我已经避免了这种编码风格与使用 StringBuilder 的整个问题,因为这实际上不是问题的一部分。