Последний блок C# не выполняется, когда исключение выдается из catch

Когда я положил 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 StackruException();
        }
        catch (Exception)
        {
            Console.WriteLine("catch");
            throw;
        }
        finally
        {
            Console.WriteLine("finally");
        }

    }

1 ответ

Я попробовал ваш код, и не имеет значения, вызывается ли метод SecondMain() снаружи или внутри блока try.

Программа всегда падает, потому что вы не обрабатываете исключения, и MainExceptionHandler из среды.Net должен позаботиться об этом. Он получает необработанное исключение и выходит из вашей программы.

Попробуйте это, и теперь я думаю, что ваш код ведет себя как ожидалось.

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 StackruException();
    }
    catch (Exception)
    {
        Console.WriteLine("catch");
        //throw;
    }
    finally
    {
        Console.WriteLine("finally");
    }

}

Я надеюсь, что это ответ, который вы искали.

Другие вопросы по тегам