异常处理尝试Catch块

时间:2014-03-11 19:55:08

标签: c#-4.0

我一直在阅读过去几个小时的例外情况并且有基本的了解。然而,在展示编码方面时,我正在阅读的这本书并没有得到最好的例子。我知道如果我有可能失败的代码,我将它包装在try块中,并特别捕获异常,即FormatException等。

然而令人困惑的部分是,当谈到调用堆栈时,例如方法A调用方法B而方法B调用方法C等。

例如,在方法c中发生异常,但是它没有一个catch处理程序,所以它传播回调用方法,因此第四,直到处理异常的方式。

我想知道的是,在导致错误的方法中继续执行还是在处理错误的方法中继续执行。

任何基本的例子都会很棒。

2 个答案:

答案 0 :(得分:1)

我不会重复其他答案已经说过的内容,但另外要指出的是,任何 finally 块将在 {{1}之后执行语句发生,但之前异常被重新抛出堆栈。换句话说, finally 块从堆栈顶部向下执行。

例如:

catch

将输出 First ,然后 Second Third Fourth

答案 1 :(得分:0)

  

我想知道的是,在导致错误的方法中继续执行还是在处理错误的方法中继续执行。

第二个是正确的。例如,在您的B方法中,如果抛出异常但未处理,则会转到调用方法,例如A,如果A处理该异常异常程序将继续从该方法执行。考虑这个例子:

private static void Main(string[] args)
{
     A();
}

static void A()
{
    try
    {
         B();
    }
    catch (Exception ex)
    {
          Console.WriteLine("Exception is thrown by {0} method and handled in A method.",ex.TargetSite);
    }

    Console.WriteLine("We are still in A method...");

}

static void B()
{
    throw new Exception();
    Console.WriteLine("We can't see this...");
}

这将产生输出:

// Exception is thrown by B() method and handled in A method.
// We are still in A method...