我已经成为.NET开发人员十多年了,所以这是一个可耻的问题,我从未知道答案。我明白了 - 如果参数为null,我可以抛出ArgumentNullException。如果我尝试取消引用空值,则抛出NullReferenceException。
但如果我的代码如下所示:
{{1}}
现在,对于早先应该抛出异常的服务而言,这不一定是个问题。
答案 0 :(得分:5)
如果没有更多的背景,很难说,但也许System.InvalidOperationException
?
当方法调用对象的当前状态无效时引发的异常。
答案 1 :(得分:1)
直接检查方法参数时,我只会使用System.ArgumentNullException,而不是在验证某个调用的结果时。
我抛出的异常类型在很大程度上取决于上下文。但在这种情况下,我可能会寻找一个自定义的例外:
public class VitalObjectNotAcquiredException : Exception { ... }
答案 2 :(得分:1)
我通常将 ArgumentNullException 用于传递给函数的对象。任何其他null相关我使用 InvalidOperationException 。在特殊情况下,如果有意义的话,我会创建一个自定义异常。
答案 3 :(得分:0)
我会抛出System.NullReferenceException。或者,如果您对此不满意,您可以根据自己的目的从更具特殊类型的空引用异常派生出来。
答案 4 :(得分:0)
考虑创建自己的Exception
类继承自ApplicationException
或Exception
:
public sealed class MyException : Exception
{
...
}
因此,您将能够控制存储在其中的信息类型。
答案 5 :(得分:0)
个人而言,我会根据GetVitalObject方法合约选择。如果此方法应该返回一个非null对象,我会更改它,以便在这种情况下抛出异常。
如果您无法控制该方法,或者返回空值是正确的(但不是在您的上下文中),我会选择自定义异常,因为Mark和Dmitry已经说过了。