StackOverflowException

StackOverflowException

我不需要从递归方式转换到非递归方式的类(class),我只想知道为什么我们不能处理这种类型的异常。无论如何,我在非常大的列表上使用递归函数。

我已经编写了代码来 try catch 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:



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

请注意,由于在发生异常时将取消堆栈的堆栈,因此在.Net的2.0之前的版本中,当处理StackOverflowException时,堆栈实际上会短得多,从而可以在不生成另一个ojit_code的情况下这样做。

关于C#-如何处理/捕获StackOverFlowException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3571253/

10-11 02:04