繁体   English   中英

检查'null'

[英]Checking for 'null'

C#是否有一些经验法则或编码约定,可以处理可能的null参数?

例如,我正在编写一个自定义方法,该方法将检索byte[] data参数。

public static string ConvertDataToMyOwnAndCustomString(byte[] data) { ... }

现在-如果传递的datanull怎么办?

我应该保持原样,以便可能发生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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM