以下例外情况可能是非常相似:我应该处理/处理这些异常吗?
ArgumentException
ArgumentNullException
InvalidOperationException
ObjectDisposedException
。- 我应该扔在我的代码?
- 我应该追上他们?
InvalidOperationException
是一个非常模糊的和广泛的例外,因为它意味着一个方法试图东西是不可能的,由于状态(例如启动一个双赢SVC这可能不是启动的)。
以下例外情况可能是非常相似:我应该处理/处理这些异常吗?
ArgumentException
ArgumentNullException
InvalidOperationException
ObjectDisposedException
。
InvalidOperationException
是一个非常模糊的和广泛的例外,因为它意味着一个方法试图东西是不可能的,由于状态(例如启动一个双赢SVC这可能不是启动的)。这一切都取决于你在做什么。除了ObjectDisposedException,这是你应该留给运行时间的东西,所有这些都可以接受,以适当的情况。
你希望其中的一些通过各种手段再发生,抓住他们,并适当地处理这种情况。
作为一般规则,你应该抛出的最具体的异常就可以了。这为消费者提供了处理/理解异常的最佳机会。
因此,例如,
InvalidOperationException是相当宽泛的,并且在更多特定选项不适合时经常用作catchall。
大部分的自制方法的参数验证(通常命名为喜欢的后卫,参数,等等)都在参数无效的情况下抛出这些异常:
我相信MSDN有何时抛出这样的例外非常详细的描述,
ArgumentException在调用方法时被抛出,并且至少有一个 传递的参数不符合被调用方法的参数说明 。的ArgumentException的所有实例应进行描述无效参数一个 有意义的错误消息,以及用于 参数值的预期范围。
ArgumentNullException当一个方法被调用并且至少有一个 传递参数为空,但不应该为空。
InvalidOperationException异常在的情况下使用时的失败调用 一个方法是由比无效的参数等原因引起的。对于 例如,InvalidOperationException异常是通过抛出:
- 的MoveNext如果一个集合中的对象创建 枚举之后被修改。
- GetString如果在方法调用之前关闭资源集是 。
是否有可能您的代码会抛出这些异常?如果是的话就抓住他们。一些代码会很有用 – skyfoot
除非你期待他们,并且你知道*特别是*如何处理他们,否则不要捕捉任何异常。如果不是,不要抓住它们。让他们泡上堆栈。这是他们设计的目的。并且没有什么时候你应该捕获ObjectDisposedException。这表明您的程序中存在一个错误;你想解决这个问题,而不是抓住它。 –