加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – 如何处理/捕获StackOverFlowExceptions?

发布时间:2020-12-15 18:04:04 所属栏目:百科 来源:网络整理
导读:我不需要从递归到非递归的方式转换的教训,我只想知道为什么我们不能处理这种类型的异常.无论如何,我在非常大的列表中使用递归函数. 我已经编写代码来尝试捕获StackOverFlowExceptions: try { recursiveFxn(100000); }catch(Exception){} private void recur
我不需要从递归到非递归的方式转换的教训,我只想知道为什么我们不能处理这种类型的异常.无论如何,我在非常大的列表中使用递归函数.

我已经编写代码来尝试捕获StackOverFlowExceptions:

try { recursiveFxn(100000); }
catch(Exception){}
private void recursiveFxn(int countdown)
{
if (countdown > 0)
    recursiveFxn(countdown - 1);
else
    throw new Exception("lol.  Forced exception.");
}

但是我仍然遇到程序崩溃(在NUnit和我正在运行的网页).为什么没有捕获异常?

解决方法

由于.NET Framework 2.0,StackOverflowException不能被捕获.这是因为它被认为是不好的做法.引用 MSDN documentation:

Starting with the .NET Framework
version 2.0,a StackOverflowException
object cannot be caught by a try-catch
block and the corresponding process is
terminated by default. Consequently,
users are advised to write their code
to detect and prevent a stack
overflow. For example,if your
application depends on recursion,use
a counter or a state condition to
terminate the recursive loop.

现在,捕获StackOverflowException的唯一方法是当用户代码抛出时,如blog by Jared Parsons所述.除了hosting the CLR之外,您可以处理(但不是捕获)StackOverflowException,并设计出一种方法来执行你的程序继续

请注意,由于堆栈在发生异常时展开,在2.0版本的.Net中,当处理StackOverflowException时,堆栈实际上会更短,这样可以在不生成另一个StackOverflowException的情况下执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读