哪种类型的例外没有捕获?

Gur*_*epS 16 .net c# exception-handling exception

很多时候,提到只捕获我可以处理的异常(抛出,包装和/或记录,或执行一些其他操作).

哪些例外无法处理?这是不应该被抓住的意思吗?我知道不应该捕获可能表示对象引用为null的异常,因为它们是编程错误而不是用户激发的.还有其他例子吗?另一个是ExecutionEngineException.

此外,catch块中的操作过程总是在rethrow,wrap/rethrow和log之间吗?是否有需要在catch块中执行某些其他操作的情况?

谢谢

Han*_*ant 16

通常的建议适用,只抓住你能处理的东西.框架内部有一个名为IsCriticalException的实用程序函数,它通常被框架代码的一部分用来决定是否吞下异常.不妨再去吧.它考虑以下关键:

  • 的NullReferenceException
  • StackOverflowException(无法捕获)
  • OutOfMemoryException异常
  • ThreadAbortException
  • ExecutionEngineException(在4.0中无法访问)
  • IndexOutOfRangeException
  • AccessViolationException

这是一个很好的清单.


ano*_*non 13

我会使用Eric Lippert的建议,而不是捕获"致命"例外:

http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx