【发布时间】:2015-12-08 18:55:08
【问题描述】:
我从事 .NET 开发已有十多年了,所以这是一个我从来不知道答案的可耻问题。我明白了——如果一个参数为空,我可以抛出一个 ArgumentNullException。如果我尝试取消引用 null 值,将引发 NullReferenceException。
但是如果我有如下代码怎么办:
var someVitalObject = someServiceReference.GetVitalObject();
if (someVitalObject == null)
{
throw new IDontKnowWhatException(); // what exception should I throw here?
}
现在,这不一定是服务的问题,应该早先抛出异常。
【问题讨论】:
-
NullReferenceException?
-
这是执行流程中的错误吗?这会导致您的应用程序终止吗?也许更多的上下文将帮助我们更好地理解问题。
-
GetVitalObject()是否违反了它的合同,或者返回 null 是否有效,但在这种情况下不是? -
API 是否对对象是否可以为空做一些保证?如果是这样,它可能更像是一个断言失败(使用 Trace.Assert)。否则,像 VitalObjectNotFoundException 这样的自定义异常将是合适的。
-
在我的例子中,为了简单起见,假设我正在检查缓存的状态以查看它是否存储了“重要对象”。到那时应该会,如果没有,那就是个问题。
标签: c# exception exception-handling