gpt4 book ai didi

c# - 为什么不能在方法末尾添加 goto 标签?

转载 作者:可可西里 更新时间:2023-11-01 08:03:30 26 4
gpt4 key购买 nike

在研究了退出嵌套循环的方法后,我决定尝试使用 goto

private void example()
{
for (int i = 0; i < 100; i++)
{
for (int ii = 0; ii < 100; ii++)
{
for (int iii = 0; iii < 100; iii++)
{
goto exitMethod;
}
}
}

exitMethod:
}

但出于某种原因,如果我将 goto 标签放在方法的最后,Visual Studio 2012(旗舰版)会报错(并且无法编译),

Screenshot

但是如果我把我的代码改成这样,

private void example()
{
for (int i = 0; i < 100; i++)
{
for (int ii = 0; ii < 100; ii++)
{
for (int iii = 0; iii < 100; iii++)
{
goto exitMethod;
}
}
}

exitMethod:

int someUnneededVariable; // Just an example, if I add ANY piece of code the error vanishes.
}

没有出现任何错误(并编译);我搜索了所有我知道的 MSDN 引用资料,但找不到任何相关信息。

我知道我可以使用 return; 轻松解决这个问题;尽管如此,我还是想找出导致此错误的原因。

最佳答案

标签本身并不存在:它标记了一个语句。来自 C# 5 规范的第 8.4 节:

A labeled-statement permits a statement to be prefixed by a label. Labeled statements are permitted in blocks, but are not permitted as embedded statements.

在这种情况下,您在方法的末尾应用标签 - 没有声明它是 for 的标签。所以编译器拒绝你的代码是绝对正确的。

如果你真的想要,你可以添加一个标签到否则冗余的返回语句:

exitMethod:
return;
}

... 或者只是空洞的陈述,正如 Irfan 所建议的那样。不过必须有一个声明。

但我不推荐它。只需将任何 goto exitMethod; 语句更改为简单的 return

关于c# - 为什么不能在方法末尾添加 goto 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com