我应该处理/捕获这些异常吗?

本文关键字:异常 处理 我应该 | 更新日期: 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如果资源集在方法调用之前被关闭。