1

几秒钟后,以下程序输出

进程因 StackOverflowException 而终止

而不是我的消息。为什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;

namespace maximumVariable
{
    class Program
    {

        public static BigInteger Factorial(int num)
        {
            try
            {
                return (num > 1) ? num*Factorial(num - 1) : (1);
            }
            catch
            {
                throw;
            }
        }


        static void Main(string[] args)
        {
            BigInteger kingKong=0;
            int facParameter=0;
            try
            {

                while (true)
                {
                    kingKong = Factorial(facParameter);
                    facParameter++;
                }

            }
            catch
            {
                Console.WriteLine("The maximum value " + kingKong.ToString()+"has been achieved after "+facParameter.ToString()+" iterations");
            }


        }
    }
}
4

2 回答 2

2

您只能StackOverflowException在非常特定的情况下捕获。因此,您的自定义错误消息永远不会显示。

请参见此处:C# 捕获堆栈溢出异常
另请参见:http: //msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx

这说得通; 堆栈溢出表示难以处理的状态(与大多数其他异常类型相比)。

于 2012-07-27T20:13:17.230 回答
1

来自 MSDN:

从 .NET Framework 2.0 版开始,StackOverflowException 对象无法被 try-catch 块捕获,并且默认情况下会终止相应的进程。因此,建议用户编写代码来检测和防止堆栈溢出。例如,如果您的应用程序依赖于递归,请使用计数器或状态条件来终止递归循环。

所以你不能再捕捉到那个异常。

于 2012-07-27T20:16:23.533 回答