在研究了退出嵌套循环的方法后,我决定尝试使用 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(旗舰版)会报错(并且无法编译),
但是如果我把我的代码改成这样,
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/