goto 语句

  C#允许给代码加上标签,这样就可以使用 goto 语句直接跳转到这些代码上。该语句优缺点并存。主要优点是:这是控制什么时候执行哪些代码的一种简单方式。主要缺点是:过多地使用这个技巧将使代码晦涩难懂。

  goto 语句的用法如下:

        goto <labelName>;

  标签用下述方式定义:

        <labelName>:

例如,下面的代码:

        int myInteger = 5;
        goto myLabel;
        myInteger += 10;

   myLabel:
        Console.WriteLine("myInteger = {0}", myInteger);

其执行过程如下:

  • myInteger 声明为 int 类型,并赋予值 5。
  • goto 语句中断正常的执行过程,把控制权转到标有 myLabel: 的代码行上。
  • myInteger 的值写入控制台。

下面突出显示的第 3 行代码从未执行。

        int myInteger = 5;
        goto myLabel;
        myInteger += 10;
    myLabel:
        Console.WriteLine("myInteger = {0}", myInteger);

  实际上,如果在应用程序中加入这段代码,会发现编译代码时,Error List 窗口会显示一个警告 ⚠️,即 Unreachable code detected 和一个行号。在无法执行的代码行中,myInteger下面还有绿色的波浪线。

  goto 语句有它们的作用,但也可能使代码陷入混乱。尽量不要使用它(使用本章后面介绍的技巧,就可以避免使用它)。

例如,因使用 goto 语句而非常难懂的代码,如下所示:

    start:
        int myInteger = 5;
        goto addVal;
    writeResult:
        Console.WriteLine("myInteger = {0}", myInteger);
        goto start;
    addVal:
        myInteger += 10;
        goto writeResult;

  这是有效的代码,但非常难懂,读者可以自己试试,看看会发生什么情况。在此之前,应尝试通过阅读这些代码来理解它们完成什么任务。后面再分析这个语句,因为本章的其他一些结构将使用该语句。

🔚