C#
是否有一些经验法则或编码约定契约,它处理可能的null
参数?
举个例子,我正在编写一个自定义方法,它会检索byte[] data
参数。
public static string ConvertDataToMyOwnAndCustomString(byte[] data) { ... }
现在 - 如果传递的data
为null
,该怎么办?
我应该保留它,以便发生可能的NullReferenceException
吗?或者我应该写支票并做这样的事情:
if (data == null) return null;
答案 0 :(得分:8)
普遍接受的模式是抛出ArgumentNullException
if(data == null) { throw new ArgumentNullException("data"); }
如果客户端将null
传递给您的方法确实是错误的。如今,您甚至可以通过代码合同强制执行该要求:
Contract.Requires(data != null);
当然,可能的情况很好null
不是您方法的错误。那是你决定的,而不是我们。但是不要返回null
来向您的客户表明发生了错误。
答案 1 :(得分:2)
我认为最常见的模式是:
if(data == null)
throw new ArgumentNullException("data");
答案 2 :(得分:1)
这完全取决于。这种方法在哪里生活?它会多久重复使用一次?它仅适用于此应用程序,还是将再次使用的代码库的一部分?
如果要使用它,特别是其他应用程序/开发人员,那么我仍然会测试null
的数据,但是我会抛出异常。你不希望它无声地窒息。
如果这是针对肯定永远不会重复使用或重新访问的代码的一次性方法,则只需测试null
并返回null
即可。但请记住,这只是合适的,因为你知道结果。如果其他应用程序有可能使用它或其他开发人员,我会测试null
然后抛出异常(很可能是ArgumentNullException
)。
答案 3 :(得分:1)
杰森和克里斯托弗的答案是正确的。我只想添加它们;
如果可能而不是异常条件,您可以获得该参数的null
,则不应抛出异常,而应返回适当的值 - 通常,null
本身也可以。
例如,对于某些模型绑定系统,缺少文本值可能会导致null
作为参数传递。这种情况可能是错误,但不是“特殊”错误。