使用catch块未捕获异常

时间:2014-03-18 13:32:48

标签: c#

上周我有疑问,是否有任何例外没有使用下面的捕获块被捕获,请确认..

try
{
  //code block here
}
catch(Exception ex)
{

}

问题:可以使用Exception基类捕获所有异常,除了一个异常是什么异常?

2 个答案:

答案 0 :(得分:2)

StackOverflowException未被捕获,因为它表示一个不易恢复的情况,但仅限于最新版本的.NET Framework。

http://msdn.microsoft.com/en-us/library/system.stackoverflowexception(v=vs.110).aspx

来自文档

  

版本注意事项   在.NET Framework的早期版本中,您的   应用程序可以捕获StackOverflowException对象(例如,   从无限递归中恢复)。但是,这种做法是   目前不鼓励,因为需要大量额外的代码   可靠地捕获堆栈溢出异常并继续编程   执行。从.NET Framework 2.0版开始,a   try-catch块无法捕获StackOverflowException对象   并且默认终止相应的进程。所以,   建议用户编写代码来检测和阻止堆栈   溢出。例如,如果您的应用程序依赖于递归,请使用   计数器或状态条件来终止递归循环。注意   托管公共语言运行库(CLR)的应用程序可以   指定CLR卸载堆栈所在的应用程序域   发生溢出异常并让相应的进程继续。   有关更多信息,请参阅ICLRPolicyManager接口和主机   概述

答案 1 :(得分:0)

根据msdn

  

抛出异常时,公共语言运行库(CLR)会查找处理此异常的catch语句。如果当前正在执行的方法不包含这样的catch块,则CLR会查看调用当前方法的方法,依此类推调用堆栈。如果未找到catch块,则CLR向用户显示未处理的异常消息并停止执行该程序。