c# – ‘Goto’是这个坏?

在做一些研究如何突破次要循环

while (true) { // Main Loop
   for (int I = 0; I < 15; I++) { // Secondary loop
       // Do Something
       break; // Break main loop?
   }
}

大多数人推荐调用“goto”函数
看下面的例子:

while (true) { // Main Loop
   for (int I = 0; I < 15; I++) { // Secondary Loop
       // Do Something
       goto ContinueOn; // Breaks the main loop
   }
}
ContinueOn:

然而;我经常听说“goto”声明是不好的做法。下面的图片是我的观点:
Series found

所以

> goto语句真的有多糟糕,为什么?
>有没有更有效的方法来打破主循环比使用“goto”语句?

编辑:

How bad is the goto statement really, and why?

这取决于具体情况。我不记得任何时候,我发现它使代码比重构更可读。这也取决于你的个人看法的可读性 – 有些人不喜欢它比别人,从其他答案是清楚的。 (作为一个兴趣点,它被广泛用于生成代码 – 所有的async / await代码在C#5是基于有效的很多gotos)。

问题是,goto倾向于被使用的情况往往是这样的情况,重构帮助东西反正 – 而goto坚持一个解决方案变得更难跟随代码变得更复杂。

Is there a more effective way to break the main loop than using the ‘goto’ statement?

绝对。将您的方法提取到一个单独的函数:

while (ProcessValues(...))
{
    // Body left deliberately empty
}

...

private bool ProcessValues()
{
   for (int i = 0; i < 15; i++)
   {
       // Do something
       return false;
   }
   return true;
}

我通常喜欢这样做,引入一个额外的局部变量来跟踪“我已完成” – 虽然这将工作,当然。

http://stackoverflow.com/questions/11906056/goto-is-this-bad

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – ‘Goto’是这个坏?