我应该处理/捕获这些异常吗?
本文关键字:异常 处理 我应该 | 更新日期: 2023-09-27 18:02:29
以下例外情况可能非常相似:
-
ArgumentException
-
ArgumentNullException
-
InvalidOperationException
-
ObjectDisposedException
.- 我应该在我的代码中抛出它们吗?
- 我应该抓住他们吗?
-
InvalidOperationException
是一个非常模糊和广泛的例外,因为它意味着一个方法尝试的东西是不可能的,由于状态(例如启动一个winsvc可能无法启动)。
作为一般规则,您应该抛出尽可能具体的异常。这为使用者提供了处理/理解异常的最佳机会。
例如
- 当参数为null时抛出ArgumnetNullException。
- 参数超出范围时的argumentoutorange异常
- ArgumentException是参数由于其他原因无效。
InvalidOperationException非常广泛,当不适合更具体的选项时,它经常被用作包围性的。
这完全取决于你在做什么。除了ObjectDisposedException(应该留给运行时处理)之外,在适当的情况下抛出所有这些异常都是可以接受的。
如果你希望其中一些发生,那么无论如何,抓住它们并适当地处理这种情况。
大多数自制方法参数验证器(通常命名为Guard, Arguments等)在无效参数的情况下抛出这些异常:
- ArgumentException -当方法参数错误
- ArgumentNullException -当方法参数为空
我相信MSDN对何时抛出此类异常有非常详细的描述,
ArgumentException在调用方法时抛出,并且至少有一个的参数说明不符合被调用的方法。ArgumentException的所有实例都应该带有描述无效参数的有意义的错误消息,以及参数的预期值范围。
ArgumentNullException当一个方法被调用时抛出传递的参数为空,但不应该为空。
InvalidOperationException在调用失败时使用方法是由无效参数以外的原因引起的。为例如,InvalidOperationException被抛出:
- MoveNext如果集合的对象在
- GetString如果资源集在方法调用之前被关闭。