冗余控制流跳转语句和跳转语句的执行

时间:2016-06-03 06:51:54

标签: c#

在这里无法理解:

  1. 在下面代码中的goto语句中,我得到一个编译器提示,说明冗余控制流跳转语句。这是什么意思?

  2. 我无法理解,为什么,在输出中我终于在lbl文本之前得到了什么?

  3. 谢谢,如果在任何地方出错,请纠正我的问题。

       class Program
          {
            static void Main(string[] args)
             {
               try
                {
                  Nullable<int> i = null;
                  //i = 5;
                  Console.WriteLine("i:" + i.HasValue);
                  Console.WriteLine("i:" + i.Value);
                }
               catch (System.InvalidOperationException e)
               {
    
                 Console.WriteLine("Exception:" + e);
                 goto lbl;  // A
    
               }
               finally
               {
                 Console.WriteLine("finally");
               }
               lbl:
               Console.WriteLine("hi lbl");
             }
           }
    

1 个答案:

答案 0 :(得分:5)

有几种方法可以避免最终阻止:

  1. 终止这个过程
  2. 杀死电脑
  3. 但是,普通代码不能跳过finally块。

    因此,不必要的控制流语句基本上就是如果你删除了goto lbl语句,那么控制流也会以相同的方式运行。它将始终执行finally块,然后执行标签。由于finally块之后没有代码,但之前没有标签,因此无论如何,没有goto的正常控制流将会这样。