2010-11-11 61 views
5

刚发现Console.WriteLine可以正确处理null字符串 像Console.WriteLine((string)null);Console.WriteLine正确处理空字符串

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

+0

顺便说一句,在你描述的情况下,什么_ incorrectling正确_意味着什么?写'空'或''? – 2010-11-11 08:14:57

+3

不错,三个答案,是的,不,也许。 :) – 2010-11-11 08:19:38

+0

@jb - 愿最好的人赢得:)。 – 2010-11-11 08:22:04

回答

4

嗯......是的。

您可以预期(几乎)所有类都将正确处理空引用。

但是,我觉得你的“正确”意思与该作者的意思不同。

例如,如果您尝试打开文件并通过null打开文件的路径,它不会默默失败,它会引发异常。

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

但是不要指望程序就像没有发生一样。

10

这充分取决于你调用的方法。当您通过null时,请参阅每种方法的MSDN文档。

当调用别人的API或库时,对null进行假设是不安全的,特别是如果您没有将其源代码用作参考时。始终阅读文档。如果文档不说,代码防守。

但是,库方法的编程方式是,当它们不接受null时,它们会抛出一个异常,告诉您它不是有效的参数。

+0

对。在调用别人的API或库时,对null进行假设是不安全的,特别是如果您没有将其源代码用作参考。始终阅读文档。如果文档不说,代码防守。 – 2010-11-11 08:12:54

+0

@Mike Clark - 确实如此。感谢您的补充,更新了答案。 – 2010-11-11 08:14:33

0

完全取决于“正确”和“方法”本身的含义。除非你的意思是“可以抛出一个异常,因为它期待一个实际的字符串”,否则不。

0

通常,当参数(无论是字符串还是任何其他类型)都需要做某事时,该方法通常会在异常时崩溃,当该参数为null时。

几个例子:

  1. 文件..无法打开 “空” 的文件等 - >错误。
  2. 解析 - >不能解析“null”,所以 - >错误。 (是的,他们在2.0中加入的TryParse)

在另一方面,当参数不需要方法通常会“吞青蛙”时,它的空,把它当作一些默认值,例如空字符串。 在Console对象的WriteLine方法的情况下,它并不真的需要该字符串,它只是将它写入控制台,因此它不在乎它是否为空。

所以和其他人说的一样,它取决于您尝试使用哪种方法,并且在尝试传递空值之前更好地阅读。