从catch抛出异常时,C#final块没有执行

时间:2012-11-26 14:09:01

标签: try-catch finally

当我将SecondMain()放入try块时,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");
        }

    }

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码,无论是从try块的外部还是内部调用SecondMain()方法都无关紧要。

程序总是崩溃,因为你不处理异常,而.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");
    }

}

我希望这是您正在寻找的答案。