Console.WriteLine如何正确处理空字符串

5

我发现Console.WriteLine可以正确处理null字符串,例如Console.WriteLine((string)null);

我可以假设大多数类库都能正确处理空引用吗?


顺便问一下,在你所描述的情况下,“正确处理空值”是什么意思?是写“null”还是“”? - Nicolas Repiquet
3
好的,三个答案,是的,不,和可能。 :) - jb.
@jb - 愿最优秀的人获胜 :)。 - Pieter van Ginkel
如果你想把 "null" 显示为字符串,你可以使用 string test = null ?? "null"; - Gucu112
1
@Gucu112:你可能是想要写成 string test = test ?? "null"; - Johannes Overmann
4个回答

10

编号

这完全取决于您调用的方法。请参阅每种方法在MSDN文档中的说明,了解在传递null时可以预期的结果。

当调用他人的API或库时,特别是如果没有源代码可用作参考时,对null做出假设是不安全的。始终阅读文档。如果文档没有说明,则要编写防御性代码。

但是,库方法被编程为不接受null时,它们将抛出异常,告诉您它不是有效的参数。


没错。在调用别人的API或库时,假设null是不安全的,特别是如果你没有它的源代码作为参考。一定要阅读文档。如果文档没有说明,请进行防御性编程。 - Mike Clark
@Mike Clark - 没错。感谢您的补充,已更新答案。 - Pieter van Ginkel

5

好的...是的。

你可以期望(几乎)所有类都能正确处理空引用。

然而,我觉得你所说的“正确”并不是该类的作者所指的。

例如,如果你尝试打开一个文件,并将路径传递为null,它不会悄无声息地失败,而是会抛出异常。

如果这就是你所谓的“正确处理”,那么当然可以。事实上,我希望所有类都能正确处理空引用。

但不要期望程序会像什么都没发生一样继续运行。


0

这完全取决于您对“正确”以及方法本身的理解。除非您的意思是“可能会抛出异常,因为它期望一个实际的字符串”,否则不会。


0

通常情况下,当参数(无论是字符串还是其他类型)需要执行某些操作时,如果该参数为null,则该方法通常会崩溃并抛出异常。

以下是一些例子:

  1. 文件...无法打开“null”文件,因此-->错误。
  2. 解析-->无法解析“null”,因此-->错误。(是的,他们在2.0中添加了TryParse)

另一方面,当参数不是必需的时,该方法通常会将其视为某个默认值,并将其作为“吞掉青蛙”的方式处理,例如空字符串。 在Console对象的WriteLine方法的情况下,它并不真正“需要”该字符串,它只是将其写入控制台,因此它不关心它是否为null。

所以像其他人说的那样,这取决于您尝试使用的方法,最好在尝试传递null值之前阅读文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接