After doing some reseach on how to break through a secondary loop
while (true) { // Main Loop
for (int I = 0; I < 15; I++) { // Secondary loop
// Do Something
break; // Break main loop?
}
}
most people recommended to call the ‘goto’ function
Looking as the following example:
while (true) { // Main Loop
for (int I = 0; I < 15; I++) { // Secondary Loop
// Do Something
goto ContinueOn; // Breaks the main loop
}
}
ContinueOn:
However; I have often heard that the ‘goto’ statement is bad practice. The picture below is perfectly illustrating my point:

So
- How bad is the goto statement really, and why?
- Is there a more effective way to break the main loop than using the ‘goto’ statement?
EDIT:
It depends on the exact situation. I can’t remember any time where I found it made the code more readable than refactoring. It also depends on your personal view of readability – some people dislike it more than others, as is clear from the other answers. (As a point of interest, it’s widely used in generated code – all of the async/await code in C# 5 is based on effectively a lot of gotos).
The problem is that situations where
gototends to be used tend to be the kind of situations where refactoring aids things anyway – whereasgotosticks with a solution which becomes harder to follow as the code gets more complicated.Absolutely. Extract your method out into a separate function:
I generally prefer doing this over introducing an extra local variable to keep track of "have I finished" – although that will work too, of course.