c# - 冗余控制流跳转语句及跳转语句的执行

标签 c#

无法理解这里的一些事情:

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

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

谢谢,如果有任何错误,请纠正我的问题。

   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");
         }
       }

最佳答案

有几种方法可以避免 finally 阻塞:

  1. 终止进程
  2. 杀死电脑

但是,普通代码不能跳过 finally block 。

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

关于c# - 冗余控制流跳转语句及跳转语句的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37607780/

相关文章:

c# - 如何更改现有 TPL block 的 MaxDegreeOfParallelism?

c# - 获取 nuget 包目录的位置

c# - 在C#中使用weka : Unable to cast object of type 'java.util.ArrayList' to type 'System.Collections.Generic.List`

c# - Convert.ChangeType 如何从字符串转换为枚举

C# 创建与处理器一样多的类实例

c# - 以编程方式访问 WPF 控件

c# - ASP.Net Web API : adding appSettings

C# 如何将放置变量添加到资源字符串中

c# - 有没有人对 10Gen 支持的 c# 驱动程序有问题

c# - LINQ to SQL 关联映射