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

标签语句

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

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!");
    else
        goto NoSoGood;
}
NotSoGood : Console.WriteLine("We have a problem!");

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

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

不要使用goto语句

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

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C#,使用goto语句可以实现跳转到程序标签语句。通过定义一个标签语句,然后使用goto加上标识符来跳转到标识符语句的位置。例如,在一个方法,我们可以定义一个标签语句,然后使用goto语句跳转到该标签语句的位置。以下是一个示例代码: ```csharp class Program { static void Main(string\[\] args) { goto loop; Console.WriteLine("method"); loop: Console.WriteLine("123456"); } } ``` 在这个例子,我们定义了一个标签语句`loop`,然后使用`goto loop`语句跳转到该标签语句的位置。当程序执行到`goto loop`语句时,会跳转到标签语句`loop`处执行后续的代码,即输出`123456`。这样,`Console.WriteLine("method")`语句将不会执行。所以程序的输出结果只有`123456`。 需要注意的是,使用goto语句可能会导致程序的逻辑变得混乱,不易理解和维护。因此,在实际开发,应尽量避免过多地使用goto语句,而是使用其他结构化的控制语句来实现相同的功能。 #### 引用[.reference_title] - *1* *2* [C# goto语句](https://blog.csdn.net/m0_46914627/article/details/116052471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C# goto语句](https://blog.csdn.net/lybwwp/article/details/106520486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值