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# はスタック オーバーフロー例外をキャッチし
ます

それは理にかなっている; スタック オーバーフローは、(他のほとんどの例外の種類と比較して) 続行するのが難しい状態を表します。

于 2012-07-27T20:13:17.230 に答える
1

MSDN から:

.NET Framework バージョン 2.0 以降では、StackOverflowException オブジェクトを try-catch ブロックでキャッチできず、対応するプロセスが既定で終了します。したがって、スタック オーバーフローを検出して防止するコードを記述することをお勧めします。たとえば、アプリケーションが再帰に依存している場合は、カウンターまたは状態条件を使用して再帰ループを終了します。

したがって、その例外をキャッチできなくなります。

于 2012-07-27T20:16:23.533 に答える