[英]Checking for 'null'
C#
是否有一些经验法则或编码约定,可以处理可能的null
参数?
例如,我正在编写一个自定义方法,该方法将检索byte[] data
参数。
public static string ConvertDataToMyOwnAndCustomString(byte[] data) { ... }
现在-如果传递的data
为null
怎么办?
我应该保持原样,以便可能发生NullReferenceException
吗? 还是我应该写一张支票然后做这样的事情:
if (data == null) return null;
通常公认的模式是抛出ArgumentNullException
if(data == null) { throw new ArgumentNullException("data"); }
如果客户端将null
传递给您的方法确实是一个错误。 如今,您甚至可以通过代码合同强制执行要求:
Contract.Requires(data != null);
当然,很可能 null
不是您的方法的错误。 那是您的决定,而不是我们的决定。 但是不要返回null
来向您的客户端指示发生了错误。
我认为最常见的模式是:
if(data == null)
throw new ArgumentNullException("data");
这真的取决于。 这种方法住在哪里? 将多久重复使用一次? 是仅适用于此应用程序,还是将再次使用的代码库的一部分?
如果要使用它,尤其是其他应用程序/开发人员,则我仍将测试数据是否为null
,但随后将引发异常。 您不希望它默默地cho住。
如果这是一种永远不会重复使用或重新访问代码的一次性方法,则可以测试null
并返回null
。 但是请记住,这仅是适当的,因为您知道结果。 如果有其他应用程序或其他开发人员将使用此方法,我将测试是否为null
然后引发异常(最有可能是ArgumentNullException
)。
杰森和克里斯托弗的答案是正确的。 我只想添加到它们中;
如果有可能(但不是特殊情况)您可以为该参数获取null
,则不应引发异常,而应返回适当的值-通常, null
本身可以工作。
例如,在某些模型绑定系统中,缺少文本值可能会导致将null
作为参数传递。 这种情况可能是一种错误,但不是“异常”错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.