上周我有疑问,是否有任何例外没有使用下面的捕获块被捕获,请确认..
try
{
//code block here
}
catch(Exception ex)
{
}
问题:可以使用Exception基类捕获所有异常,除了一个异常是什么异常?
答案 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向用户显示未处理的异常消息并停止执行该程序。