在研究了如何突破次级循环之后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'声明是不好的做法。下图完美地说明了我的观点:所以goto语句实际上有多糟糕,为什么?有没有比使用“ goto”语句更有效的方法来打破主循环?
3 回答
Helenr
TA贡献1780条经验 获得超3个赞
编辑:
goto语句实际上有多糟糕,为什么?
这取决于实际情况。我不记得任何时候我发现它使代码比重构更易读。这也取决于您对可读性的个人看法-从其他答案中可以明显看出,有些人比其他人更不喜欢它。(有意思的是,它在生成的代码中得到了广泛的使用-C#5中的所有异步/等待代码实际上都是基于很多getos的)。
问题在于,goto
倾向于使用的情况倾向于是无论如何重构都可以帮助事情的情况-而goto
坚持使用随着代码变得更加复杂而变得难以遵循的解决方案。
有没有比使用“ goto”语句更有效的方法来打破主循环?
绝对。将您的方法提取到一个单独的函数中:
while (ProcessValues(...)){ // Body left deliberately empty}...private bool ProcessValues(){ for (int i = 0; i < 15; i++) { // Do something return false; } return true;}
我通常更喜欢这样做,而不是引入额外的局部变量来跟踪“我已经完成”了-尽管当然可以。
添加回答
举报
0/150
提交
取消