很多时候,有人提到只捕获我可以处理的异常(抛出、包装和/或记录,或执行一些其他操作)。
哪些异常不能处理?这和不该抓是不是一样的意思?我知道不应该捕获可能表示对象引用为空的异常,因为它们是编程错误而不是用户引发的。还有其他例子吗?另一个是 ExecutionEngineException
。
此外,catch block 中的操作过程是否总是在重新抛出、包装/重新抛出和记录之间?是否存在需要在 catch block 中执行其他操作的情况?
谢谢
最佳答案
通常的建议适用,只捕获你能处理的。框架内有一个名为 IsCriticalException 的实用函数,框架代码的某些部分经常使用它来决定是否吞下异常。不妨就这样过去吧。它认为以下关键因素:
- 空引用异常
- StackOverflowException(无法捕获)
- 内存不足异常
- 线程中止异常
- ExecutionEngineException(在 4.0 中无法捕获)
- IndexOutOfRangeException
- 访问冲突异常
这是一个很好的列表。
关于c# - 哪些类型的异常不要捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507836/