我应该为意外的空值抛出什么异常?

时间:2015-12-08 18:55:09

标签: c# exception exception-handling

我已经成为.NET开发人员十多年了,所以这是一个可耻的问题,我从未知道答案。我明白了 - 如果参数为null,我可以抛出ArgumentNullException。如果我尝试取消引用空值,则抛出NullReferenceException。

但如果我的代码如下所示:

{{1}}

现在,对于早先应该抛出异常的服务而言,这不一定是个问题。

6 个答案:

答案 0 :(得分:5)

如果没有更多的背景,很难说,但也许System.InvalidOperationException

  

当方法调用对象的当前状态无效时引发的异常。

答案 1 :(得分:1)

直接检查方法参数时,我只会使用System.ArgumentNullException,而不是在验证某个调用的结果时。

我抛出的异常类型在很大程度上取决于上下文。但在这种情况下,我可能会寻找一个自定义的例外:

public class VitalObjectNotAcquiredException : Exception { ... }

答案 2 :(得分:1)

我通常将 ArgumentNullException 用于传递给函数的对象。任何其他null相关我使用 InvalidOperationException 。在特殊情况下,如果有意义的话,我会创建一个自定义异常。

答案 3 :(得分:0)

我会抛出System.NullReferenceException。或者,如果您对此不满意,您可以根据自己的目的从更具特殊类型的空引用异常派生出来。

答案 4 :(得分:0)

考虑创建自己的Exception类继承自ApplicationExceptionException

public sealed class MyException : Exception
{
    ...
}

因此,您将能够控制存储在其中的信息类型。

答案 5 :(得分:0)

个人而言,我会根据GetVitalObject方法合约选择。如果此方法应该返回一个非null对象,我会更改它,以便在这种情况下抛出异常。

如果您无法控制该方法,或者返回空值是正确的(但不是在您的上下文中),我会选择自定义异常,因为Mark和Dmitry已经说过了。