在研究了如何突破次級循環之后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條經驗 獲得超4個贊
編輯:
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
提交
取消
