2

try blcok の中に入れるSecondMain()と、内部の最後のブロックsecondMain()が実行されています。しかし、私がそれを外に置くと、実行されません。なぜ実行されないのですか?

static void Main(string[] args)
    {

        try
        {
            SecondMain(args); //try putting 
            Console.WriteLine("try 1"); 
            throw new Exception("Just fail me");              
        }            
        finally
        {
            Console.WriteLine("finally");
        }

    }


    static void SecondMain(string[] args)
    {

        try
        {
            throw new StackOverflowException();
        }
        catch (Exception)
        {
            Console.WriteLine("catch");
            throw;
        }
        finally
        {
            Console.WriteLine("finally");
        }

    }
4

1 に答える 1

0

私はあなたのコードを試しましたが、SecondMain() メソッドが外部から呼び出されたのか、try ブロック内から呼び出されたのかは関係ありません。

例外を処理せず、.Net 環境の MainExceptionHandler がこれを処理する必要があるため、プログラムは常にクラッシュします。彼は未処理の例外を受け取り、プログラムを終了します。

これを試してみてください。コードが期待どおりに動作すると思います。

static void Main(string[] args)
{

    try
    {
        SecondMain(args); //try putting 
        Console.WriteLine("try 1"); 
        throw new Exception("Just fail me");              
    }
    catch(Exception)
    {
        Console.WriteLine("Caught");
    }      
    finally
    {
        Console.WriteLine("finally");
    }

}


static void SecondMain(string[] args)
{

    try
    {
        throw new StackOverflowException();
    }
    catch (Exception)
    {
        Console.WriteLine("catch");
        //throw;
    }
    finally
    {
        Console.WriteLine("finally");
    }

}

これがあなたが探していた答えであることを願っています。

于 2012-11-26T14:38:05.007 に答える