以下例外可能非常相似:
ArgumentException
ArgumentNullException
InvalidOperationException
ObjectDisposedException
。
InvalidOperationException
是一个非常模糊和广泛的例外,因为它意味着一种方法尝试一些因状态而无法实现的东西(例如,启动一个可能无法启动的win svc)。答案 0 :(得分:2)
作为一般规则,您应该尽可能地抛出最具体的例外。这为消费者提供了处理/理解异常的最佳机会。
例如,
InvalidOperationException非常广泛,并且在更多特定选项不适合时常用作捕获。
答案 1 :(得分:1)
这完全取决于你在做什么。除了ObjectDisposedException之外,这是你应该留给运行时的东西,所有这些都可以在适当的情况下抛出。
你是否期望通过各种方式发生其中一些,抓住它们并适当地处理这种情况。
答案 2 :(得分:1)
大多数自制的方法参数验证器(通常命名为Guard,Arguments等等)在无效参数的情况下抛出这些异常:
我相信MSDN有关于何时抛出此类异常的详细描述,
调用方法且至少有一个方法时,抛出ArgumentException 传递的参数不符合参数规范 被叫方法。 ArgumentException的所有实例都应该带有 描述无效参数的有意义的错误消息,以及 参数的预期值范围。
调用方法并且至少有一个方法时,抛出ArgumentNullException 传递的参数为null但不应该为null。
InvalidOperationException 用于无法调用的情况 方法是由无效参数以外的原因引起的。对于 例如,抛出InvalidOperationException:
- MoveNext如果在之后修改了集合的对象 枚举器已创建。
- 如果资源集在方法调用之前关闭,则为GetString 制成。