C#中的标签语句与goto语句

2022-10-22 14:07:16

标签语句

标签语句由一个标识符后面跟一个冒号,再跟一条语句所组成,形式如下:

Identifier : Statement

标签语句在执行时,标签相当于完全不存在,仅仅执行Statement的部分。

  • 给语句添加一个标签,允许控制从代码的其他的部分转移到该语句。
  • 标签语句只允许用在块内部

标签

标签有其自己的声明空间,因此,标签语句中的标识符可以是任何有效的标识符,包括那些可能已经在重叠的作用域内声明的标识符(比如本地变量或参数名)。
举个例子:

{
    int xyz =0;    //表示变量xyz...
    xyz : Console.Writeline("这样写是可以的!");    //表示标签xyz
}

然而,标签的标识符也是有限制的:

  • 不可以是关键字
  • 不可以和在重叠范围内和另一个标签标识符相同

标签语句的作用域

  • 它所声明的块。
  • 任何嵌套在该块内的块。
    举个例子:
static void main()
{   //作用域A
    {    //作用域B
    increment: x++
        {    //作用域C
            {    //作用域D...
            }

            {    //作用域E...
            }
        }
    end: Console.WriteLine("Exiting");
    }
}

在上面的这个例子中:

  • 在作用域B和所有嵌套块中的代码都可以看到并访问标签语句,即increment和end都在作用域B中。
  • 在作用域内部任何位置,代码都可以跳出到标签语句。
  • 从外部(例如上面的作用域A)代码都不能跳入标签语句的块。

goto语句

goto语句可以无条件转移控制到一个标签语句。它的形式如下:

goto Identifier;

其中Identifier是标签语句的标识符。
举个例子:

bool thingsAreFine;while(true)
{
    thingsAreFine = GetNuclearReactorCondition();if(thingsAreFine)
        Console.WriteLine("This are fine!");elsegoto NoSoGood;
}
NotSoGood : Console.WriteLine("We have a problem!");

在上面的例子中,goto语句必须在标签语句的作用域内

  • goto语句可以跳到它本身所在块内的任何标签语句,或跳出到任何它被嵌套的块内的标签语句。
  • goto语句不能跳入任何嵌套在该语句本身所在块内部的任何块。

不要使用goto语句

使用goto语句是非常坏的习惯,因为它会导致弱结构化的、难以调试和维护的代码。

  • 作者:WhiteJunior
  • 原文链接:https://blog.csdn.net/lym940928/article/details/81022525
    更新时间:2022-10-22 14:07:16