检查是否有'null'

本文关键字:null 是否 检查 | 更新日期: 2023-09-27 18:15:32

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

作为一个例子,我正在编写一个自定义方法,它检索一个byte[] data参数。

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

现在-如果通过的datanull,我该怎么办?

我应该离开它,因为它是这样一个可能的NullReferenceException发生?或者我应该写一张支票,然后这样做:

if (data == null) return null;

检查是否有'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作为参数传递。这种情况可能是错误,但不是"异常"。