我想知道在我的 .NET 方法可能根据提供的参数和当前对象状态引发两个或多个异常之一的情况下应遵循哪些最佳实践。哪个异常应优先,如何确定?
一般情况下的答案是最好的,但这里有一个例子来说明我的问题:
假设我有一个接受对象参数的方法。此参数不能为 null,因为例如,它具有需要调用才能使方法正常工作的属性或方法。在这种情况下,可能会抛出ArgumentNullException
。
还假设我的方法在一个类上,它的实例首先需要处于特定状态才能使调用有效。如果不是,那么可以在这里扔InvalidOperationException
。
现在考虑这样一种情况:使用 null 参数调用该方法,而类实例也处于无效状态。我应该抛出哪个异常,ArgumentNullException
还是InvalidOperationException
?为什么呢?
InvalidOperationException
是我选择检查所描述示例的第一个异常。此示例的处理顺序首先要求对象处于特定状态,然后才适合调用该方法。如果它未处于正确状态,则方法输入的验证无关紧要。因此,抛出ArugmentNullException
将掩盖此示例的真正问题。