块执行流的意外输出

时间:2017-01-31 07:07:30

标签: c#

这是我编写的示例代码,用于理解输出以及finally块的执行方式:

public static void finallyBlockExecution(int num)
{
    try
    {
        if (num != 14)
        {
            Console.WriteLine("num is {0}", num);
            exceptionMethod(++num);
        }
    }
    finally
    {
        Console.WriteLine("Finally executed.. {0}", num);
    }
}

当我调用这样的方法时:ClassA.finallyBlockExecution(10); 输出是:

num is 10
num is 11
num is 12
num is 13
finally executed.. 14
finally executed.. 14
finally executed.. 13
finally executed.. 12
finally executed.. 11

我知道finally将被执行5次,但我无法弄清楚为什么它会打印14次。

1 个答案:

答案 0 :(得分:0)

当程序流程到达try块并且如果定义了finally块时,则总是在任何情况下都会执行块。如果不执行finally块,方法不能返回。这就是'最终执行... 14'被打印两次的原因。想象一下,我们有以下代码块。

 public int DoSomeCalculation()
 {
   int a=0;
   try
   {
     //perform some calculations
     return a;
   }
   catch(Exception ex)
   {
    return -1;
   }
   finally
   {
   Console.WriteLine("Do some cleanup");
   }
  }

这里最终将执行块,无论方法是从try还是catch块返回。