检查是否有'null'
本文关键字:null 是否 检查 | 更新日期: 2023-09-27 18:15:32
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
,但随后我会抛出一个异常。你不想让它无声地窒息吧。
如果这是一个一次性的方法,用于肯定不会被重用或重新访问的代码,您可以只测试null
并返回null
。记住,只有当你知道结果的时候,这样做才是合适的。如果有任何机会,其他应用程序将使用这个,或其他开发人员,我会测试null
,然后抛出一个异常(最有可能是ArgumentNullException
)。
Jason和Christopher的答案是正确的。我只是想补充一下;
如果很可能并且不是异常条件,您可以为该参数获得null
,则不应该抛出异常,而是返回一个适当的值——通常null
本身就可以工作。
例如,在一些模型绑定系统中,缺少文本值可能导致null
作为参数传递。这种情况可能是错误,但不是"异常"。