1

是否C#有一些经验法则或编码约定合同来处理可能的null论点?

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

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

data现在 - 如果通过了我该怎么办null

我应该保持原样以便NullReferenceException发生可能吗?或者我应该写一张支票并做这样的事情:

if (data == null) return null;
4

4 回答 4

8

普遍接受的模式是抛出一个ArgumentNullException

if(data == null) { throw new ArgumentNullException("data"); }

null如果客户端传递给您的方法确实是一个错误。如今,您甚至可以通过代码合同强制执行要求:

Contract.Requires(data != null);

当然,您的方法很可能null不是错误。不过,这由您决定,而不是我们。但不要返回null以向您的客户表明发生了错误。

于 2011-11-23T01:58:33.103 回答
2

我认为最常见的模式是:

if(data == null) 
    throw new ArgumentNullException("data");
于 2011-11-23T01:58:53.590 回答
1

这真的取决于。这种方法适用于哪里?多久会重复使用一次?它仅适用于此应用程序,还是将再次使用的代码库的一部分?

如果要使用它,尤其是其他应用程序/开发人员,那么我仍然会测试 data being null,但是我会抛出异常。你不想让它安静地窒息。

如果这是一种一次性方法,用于肯定永远不会被重用或重新访问的代码,您可以只测试null并返回null。但是请记住,这只是因为您知道结果才合适。如果有任何其他应用程序或其他开发人员使用它的机会,我会测试null然后抛出异常(很可能是ArgumentNullException)。

于 2011-11-23T01:58:59.627 回答
1

Jason 和 Christopher 的回答是正确的。我只想添加它们;

如果该参数很可能而不是异常情况,null则不应抛出异常,而应返回适当的值-通常,null它本身就可以工作。

例如,对于某些模型绑定系统,缺少文本值可能会导致将 anull作为参数传递。这种情况可能是错误,但不是“异常”。

于 2011-11-23T02:01:43.047 回答