0

main からデフォルトの int 値を返したい。

次の点を考慮してください。

using System;
class Class1
{
    static int Main(string[] args)
    {
        int intReturnCode = 1;
        int intRandNumber;

        Random myRandom = new Random();
        intRandNumber = myRandom.Next(0,2);
        if(intRandNumber ==1)
        {
            throw new Exception("ErrorError");      
        }
        return intReturnCode;
    }
}

例外に到達すると、リターンコードを設定できません。

main 内にデフォルトの戻りコードを持つことは可能ですか?

明確化:未処理の例外をスローするプログラムがあります。アプリケーションを try catch 内に配置していますが、一部のエラー (おそらくメモリ不足、スタックオーバーフローなど) がまだ発生しており、アプリケーションが本番環境で失敗しています。

これを修正するために、未処理の例外をキャプチャするコードを追加しました。

これはメインに追加されました:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);

そして今、未処理の例外が発生したときに到達するこのメソッドがあります。

public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)   
{ 
    //here's how you get the exception  

    Exception exception = (Exception)e.ExceptionObject;                 

    //bail out in a tidy way and perform your logging
}

問題は、私はもうメインにいないので、ゼロ以外の終了コードで終了したいということです。

4

4 に答える 4

5

ハンドルされない例外は、実装定義の動作です。何でも起れる; CLR は、適切と思われるプロセスのリターン コードを設定することを決定したり、デバッガーを起動したり、必要なことを何でも実行したりできます。未処理の例外を含むプログラムの動作に依存することはできません。

プロセスが終了したときにリターン コードが何であるかを判断するなど、予測可能な動作が必要な場合は、未処理の例外の合計がゼロである必要があります。

未処理のメモリ不足の例外をスローしているサードパーティ コンポーネントがある場合、最善の策は、そのコンポーネントのバグを修正することです。それができない場合は、コンポーネントを独自のプロセスまたは独自の appdomain に分離します。

于 2013-04-24T16:24:35.647 に答える
4

main問題は、エラーを示すリターン コードを提供する代わりに、なぜ例外をスローするのかということです。あなたがしていることの代わりに、私のコードは次のようになります。

static int Main(string[] args)
{
    int intRandNumber;

    try
    {
        Random myRandom = new Random();
        intRandNumber = myRandom.Next(0,2);
        if(intRandNumber ==1)
        {
            Console.WriteLine("Got invalid random number!");
            return 0;
        }
    }
    catch (Exception exp)
    {
        Console.WriteLine("Strange ... an error occurred! " + exp.ToString());
        return -1;
    }

    return 1;
}

経験則として、プログラム フローを制御するために例外をスローしないでください。おっとのような条件を処理できれば、例外をスローせずに間違った番号を取得しました。

于 2013-04-24T15:51:24.440 に答える