c# - 哪些类型的异常不要捕获?

标签 c# .net exception exception-handling

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

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

此外,catch block 中的操作过程是否总是在重新抛出、包装/重新抛出和记录之间?是否存在需要在 catch block 中执行其他操作的情况?

谢谢

最佳答案

通常的建议适用,只捕获你能处理的。框架内有一个名为 IsCriticalException 的实用函数,框架代码的某些部分经常使用它来决定是否吞下异常。不妨就这样过去吧。它认为以下关键因素:

  • 空引用异常
  • StackOverflowException(无法捕获)
  • 内存不足异常
  • 线程中止异常
  • ExecutionEngineException(在 4.0 中无法捕获)
  • IndexOutOfRangeException
  • 访问冲突异常

这是一个很好的列表。

关于c# - 哪些类型的异常不要捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507836/

相关文章:

c# - 如何对 JObject 数组进行排序?

c# - 如何检测 Winforms 应用程序已闲置一段时间

c# - 有没有一种方法可以从字符串中删除空白字符?

c# - 所有 .NET 异常都可以序列化吗?

python - 如何使用我的自定义异常流程类重写异常消息?

php - fatal error :未捕获的异常 'Zend_Session_Exception' 带有消息“Zend_Session::start()”

c# - 如何删除 WPF 中的系统菜单?

c# - memberInfo.GetValue() C#

.net - 如何为使用 winforms 的 Controller 类编写单元测试?

.net - 将 AddressOf 传递给 VB.NET 中的函数以使用 AddHandler