我不需要从递归方式转换到非递归方式的类(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/