goto in C#
Dieses Tutorial demonstriert die Verwendung der goto
-Syntax in C# und liefert einige Beispiele für die praktische Verwendung in Ihrem Code.
goto
ist eine bedingungslose Sprunganweisung, dass das Programm automatisch zu einem neuen Teil des Codes springt, sobald es angetroffen wird. Um goto
verwenden zu können, müssen Sie sowohl eine mit einem Label markierte Anweisung als auch eine Instanz haben, die das Label aufruft.
Um ein Label zu erstellen, fügen Sie seinen Namen mit einem Doppelpunkt vor der Anweisung hinzu, die ausgeführt werden soll, wenn das Label aufgerufen wird.
Beispiel:
using System;
namespace goto_Example1 {
class Program {
static void Main(string[] args) {
int a = 1;
goto print_a;
a = 2;
print_a:
Console.WriteLine(a.ToString());
Console.ReadLine();
}
}
}
In diesem Beispiel initialisieren wir die Integer-Variable a
auf gleich eins. Da wir sofort goto
aufrufen, um zur Anweisung print_a
zu springen, wird a
nie gleich zwei gesetzt. Wenn wir also den Wert von a
auf der Konsole ausgeben, wird 1 und nicht 2 veröffentlicht.
Ausgabe:
1
Wann man goto
in C# verwendet
Allerdings wird goto
heute nicht mehr so häufig verwendet, da es dafür kritisiert wurde, dass es die Lesbarkeit des Codes verschlechtert, da der logische Fluss nicht so klar ist, wenn Sie zu einem völlig anderen Abschnitt springen müssen.
Es gibt jedoch immer noch einige Fälle, in denen goto
von Vorteil sein und die Lesbarkeit verbessern kann. Beispielsweise kann es verschachtelten Schleifen und switch-Anweisungen entkommen.
Beispiel:
using System;
namespace goto_Example2 {
class Program {
static void Main(string[] args) {
// Intialize the integer variable a
int a = 2;
// Run the function test input
TestInput(a);
// Change the value of a and see how it affects the output from TestInput()
a = 1;
TestInput(a);
a = 3;
TestInput(a);
Console.ReadLine();
}
static void TestInput(int input) {
// In this example function, we only want to accept either 1 or 2 as values.
// If we accept the value 1, we want to add to it and then run case 2;
// Print the original value
Console.WriteLine("Input Being Tested: " + input.ToString());
switch (input) {
case 1:
input++;
// If goto isn't called, the input value will not be modified, and its final value would
// have been unchanged
goto case 2;
case 2:
input = input / 2;
break;
default:
break;
}
Console.WriteLine("Final Value: " + input.ToString() + "\n");
}
}
}
Im obigen Beispiel haben wir eine Beispielfunktion erstellt, um je nach übergebenem Wert unterschiedliche Dinge zu tun. Drei Fälle werden geprüft. Der erste ist, wenn der Wert gleich 1 ist. Wenn dies der Fall ist, addieren wir den Eingabewert und fahren dann mit der Funktion goto
mit Fall 2 fort. Ohne den Aufruf von goto
wäre der Eingabewert unverändert geblieben.
In Fall 2 teilen wir die Eingabe durch 2. Schließlich fällt jeder andere übergebene Wert unter den Standardfall und wird überhaupt nicht geändert. Schließlich wird der Endwert gedruckt und zeigt, dass die Fälle 1 und 2 zu demselben absoluten Wert führen. Aufgrund von goto
kann der Fall auch dann angewendet werden, wenn er ursprünglich nicht den Fallspezifikationen entsprach, indem zu seiner Anweisung gesprungen wird.
Ausgabe:
Input Being Tested: 2
Final Value: 1
Input Being Tested: 1
Final Value: 1
Input Being Tested: 3
Final Value: 3