C# > Core C# > Control Flow > goto Statement
Basic Goto Example
This snippet demonstrates a simple use of the goto
statement to jump to a labeled section of code. While goto
statements can make code harder to read and maintain, this example illustrates their basic functionality.
Code Demonstration
This code uses a goto
statement to create a loop. The start:
label marks the beginning of the loop. The code prints the value of i
, increments it, and then checks if i
is less than 5. If it is, the goto start;
statement jumps back to the beginning of the loop. Once i
reaches 5, the condition becomes false, and the code continues to the next line after the if
statement.
using System;
public class GotoExample
{
public static void Main(string[] args)
{
int i = 0;
start:
Console.WriteLine("Value of i: " + i);
i++;
if (i < 5)
{
goto start;
}
Console.WriteLine("Loop finished.");
}
}
Concepts Behind the Snippet
The goto
statement provides unconditional transfer of control to a labeled statement within the same function. It's a low-level construct that can be used to create loops, jump out of nested blocks, or implement state machines. However, overuse of goto
can lead to 'spaghetti code,' which is difficult to understand and maintain.
When to Use Them
goto
statements are rarely necessary in modern C# programming. They are sometimes used to break out of deeply nested loops, especially when exception handling isn't appropriate. They can also be found in auto-generated code or in performance-critical sections where carefully crafted jumps can optimize execution flow. However, in most cases, structured programming constructs like for
, while
, and break
provide clearer and more maintainable alternatives.
Alternatives
Instead of using goto
for loops, prefer for
, while
, or do-while
loops. To break out of nested loops, consider refactoring the code into smaller functions or using a boolean flag to control the loop's execution. Exception handling (try-catch
) can also be used to handle exceptional situations and break out of deeply nested blocks of code.
Cons
goto
statements can make code harder to follow and understand. The flow of execution becomes less predictable.goto
statements is more difficult to modify and debug.goto
can lead to tangled and unstructured code, commonly referred to as 'spaghetti code.'
FAQ
-
What is a labeled statement?
A labeled statement is a statement that is preceded by an identifier followed by a colon (:
). The identifier is the label, and it can be used as the target of agoto
statement. -
Is it good practice to use
goto
in C#?
Generally, no. Modern C# programming emphasizes structured programming constructs. Whilegoto
has its uses in very specific situations (like breaking out of deeply nested loops or in auto-generated code), it should be used sparingly and with caution. Prioritize using clearer and more maintainable alternatives like loops and exception handling whenever possible.