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

var*_*ian 7 c# exception-handling exception

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

但是如果我有如下代码怎么办:

var someVitalObject = someServiceReference.GetVitalObject();

if (someVitalObject == null)
{
  throw new IDontKnowWhatException(); // what exception should I throw here?
}
Run Code Online (Sandbox Code Playgroud)

现在,这不一定是早先应该抛出异常的服务的问题.

Gwe*_*etz 9

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


cub*_*brr 5

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

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