我发现Console.WriteLine
可以正确处理null
字符串,例如Console.WriteLine((string)null)
;
我可以假设大多数类库都能正确处理空引用吗?
我发现Console.WriteLine
可以正确处理null
字符串,例如Console.WriteLine((string)null)
;
我可以假设大多数类库都能正确处理空引用吗?
编号
这完全取决于您调用的方法。请参阅每种方法在MSDN文档中的说明,了解在传递null
时可以预期的结果。
当调用他人的API或库时,特别是如果没有源代码可用作参考时,对null
做出假设是不安全的。始终阅读文档。如果文档没有说明,则要编写防御性代码。
但是,库方法被编程为不接受null
时,它们将抛出异常,告诉您它不是有效的参数。
好的...是的。
你可以期望(几乎)所有类都能正确处理空引用。
然而,我觉得你所说的“正确”并不是该类的作者所指的。
例如,如果你尝试打开一个文件,并将路径传递为null
,它不会悄无声息地失败,而是会抛出异常。
如果这就是你所谓的“正确处理”,那么当然可以。事实上,我希望所有类都能正确处理空引用。
但不要期望程序会像什么都没发生一样继续运行。
这完全取决于您对“正确”以及方法本身的理解。除非您的意思是“可能会抛出异常,因为它期望一个实际的字符串”,否则不会。
通常情况下,当参数(无论是字符串还是其他类型)需要执行某些操作时,如果该参数为null,则该方法通常会崩溃并抛出异常。
以下是一些例子:
另一方面,当参数不是必需的时,该方法通常会将其视为某个默认值,并将其作为“吞掉青蛙”的方式处理,例如空字符串。 在Console对象的WriteLine方法的情况下,它并不真正“需要”该字符串,它只是将其写入控制台,因此它不关心它是否为null。
所以像其他人说的那样,这取决于您尝试使用的方法,最好在尝试传递null值之前阅读文档。
string test = null ?? "null";
。 - Gucu112string test = test ?? "null";
。 - Johannes Overmann