Anweisungen (C#-Programmierhandbuch)Statements (C# Programming Guide)

Von einer Anwendung ausgeführte Aktionen werden in Anweisungen ausgedrückt.The actions that a program takes are expressed in statements. Häufig verwendete Aktionen umfassen das Deklarieren von Variablen, Zuweisen von Werten, Aufrufen von Methoden, Durchlaufen von Auflistungen und das Verzweigen auf einen oder einen anderen Codeblock, je nach gegebener Bedingung.Common actions include declaring variables, assigning values, calling methods, looping through collections, and branching to one or another block of code, depending on a given condition. Die Reihenfolge, in der Anweisungen in einem Programm ausgeführt werden, wird „Ablaufsteuerung“ oder „Ausführungsablauf“ genannt.The order in which statements are executed in a program is called the flow of control or flow of execution. Die Ablaufsteuerung kann jedes Mal, wenn ein Programm ausgeführt wird, variieren, je nachdem, wie die Anwendung auf eine Eingabe reagiert, die sie während der Laufzeit empfängt.The flow of control may vary every time that a program is run, depending on how the program reacts to input that it receives at run time.

Eine Anweisung kann aus einer einzelnen Codezeile, die mit einem Semikolon endet, oder aus einer Reihe von einzeiligen Anweisungen in einem Block bestehen.A statement can consist of a single line of code that ends in a semicolon, or a series of single-line statements in a block. Ein Anweisungsblock ist in geschweiften Klammern eingeschlossen und kann geschachtelte Blöcke enthalten.A statement block is enclosed in {} brackets and can contain nested blocks. Der folgende Code zeigt zwei Beispiele für einzeilige Anweisungen und einen mehrzeiligen Anweisungsblock:The following code shows two examples of single-line statements, and a multi-line statement block:

    static void Main()
    {
        // Declaration statement.
        int counter;

        // Assignment statement.
        counter = 1;

        // Error! This is an expression, not an expression statement.
        // counter + 1; 

        // Declaration statements with initializers are functionally
        // equivalent to  declaration statement followed by assignment statement:         
        int[] radii = { 15, 32, 108, 74, 9 }; // Declare and initialize an array.
        const double pi = 3.14159; // Declare and initialize  constant.          

        // foreach statement block that contains multiple statements.
        foreach (int radius in radii)
        {
            // Declaration statement with initializer.
            double circumference = pi * (2 * radius);

            // Expression statement (method invocation). A single-line
            // statement can span multiple text lines because line breaks
            // are treated as white space, which is ignored by the compiler.
            System.Console.WriteLine("Radius of circle #{0} is {1}. Circumference = {2:N2}",
                                    counter, radius, circumference);

            // Expression statement (postfix increment).
            counter++;

        } // End of foreach statement block
    } // End of Main method body.
} // End of SimpleStatements class.
/*
   Output:
    Radius of circle #1 = 15. Circumference = 94.25
    Radius of circle #2 = 32. Circumference = 201.06
    Radius of circle #3 = 108. Circumference = 678.58
    Radius of circle #4 = 74. Circumference = 464.96
    Radius of circle #5 = 9. Circumference = 56.55
*/

Typen von AnweisungenTypes of Statements

Die folgende Tabelle enthält die verschiedenen Typen von Anweisungen in C# und die zugehörigen Schlüsselwörter, mit Links zu Themen, die weitere Informationen enthalten:The following table lists the various types of statements in C# and their associated keywords, with links to topics that include more information:

KategorieCategory C#-Schlüsselwörter / HinweiseC# keywords / notes
DeklarationsanweisungenDeclaration statements Eine Deklarationsanweisung führt eine neue Variable oder Konstante ein.A declaration statement introduces a new variable or constant. Eine Deklaration einer Variable kann der Variable optional einen Wert zuweisen.A variable declaration can optionally assign a value to the variable. Bei einer Deklaration einer Konstante ist die Zuweisung erforderlich.In a constant declaration, the assignment is required.

// Variable declaration statements.
double area;
double radius = 2;

// Constant declaration statement.
const double pi = 3.14159;
AusdrucksanweisungenExpression statements Ausdrucksanweisungen, die einen Wert berechnen, müssen den Wert in einer Variablen speichern.Expression statements that calculate a value must store the value in a variable.

// Expression statement (assignment).
area = 3.14 * (radius * radius);

// Error. Not  statement because no assignment:
//circ * 2;

// Expression statement (method invocation).
System.Console.WriteLine();

// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
    new System.Collections.Generic.List<string>();
AuswahlanweisungenSelection statements Auswahlanweisungen helfen Ihnen in unterschiedliche Codeabschnitte zu verzweigen, abhängig von einer oder mehreren angegebenen Bedingungen.Selection statements enable you to branch to different sections of code, depending on one or more specified conditions. Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

if, else, switch, caseif, else, switch, case
IterationsanweisungenIteration statements Iterationsanweisungen helfen Ihnen, Auflistungen, wie z.B. Arrays, zu durchlaufen oder den selben Satz von Anweisungen solange zu wiederholen, bis eine angegebene Bedingung erfüllt ist.Iteration statements enable you to loop through collections like arrays, or perform the same set of statements repeatedly until a specified condition is met. Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

do, for, foreach, in, whiledo, for, foreach, in, while
SprunganweisungenJump statements Sprunganweisungen übertragen Steuerelemente zu einem anderen Codeabschnitt.Jump statements transfer control to another section of code. Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

break, continue, default, goto, return, yieldbreak, continue, default, goto, return, yield
AusnahmebehandlungsanweisungenException handling statements Mit Ausnahmebehandlungsanweisungen können Sie ordnungsgemäß von Ausnahmebedingungen wiederherstellen, die zur Laufzeit auftreten.Exception handling statements enable you to gracefully recover from exceptional conditions that occur at run time. Weitere Informationen finden Sie unter den folgenden Themen:For more information, see the following topics:

throw, try-catch, try-finally, try-catch-finallythrow, try-catch, try-finally, try-catch-finally
Checked und uncheckedChecked and unchecked Die Anweisungen „checked“ und „unchecked“ helfen Ihnen anzugeben, ob numerische Vorgänge einen Überlauf verursachen dürfen, wenn das Ergebnis in einer Variable gespeichert ist, die zu klein ist, um den resultierenden Wert zu speichern.Checked and unchecked statements enable you to specify whether numerical operations are allowed to cause an overflow when the result is stored in a variable that is too small to hold the resulting value. Weitere Informationen finden Sie unter checked und unchecked.For more information, see checked and unchecked.
Die Anweisung awaitThe await statement Wenn Sie eine Methode mit dem async -Modifizierer kennzeichnen, können Sie den await Operator in der Methode verwenden.If you mark a method with the async modifier, you can use the await operator in the method. Wenn ein Ausdruck await in der asynchronen Methode erreicht wird, wird die Steuerung an den Aufrufer zurückgegeben, und die Ausführung der Methode wird angehalten, bis die erwartete Aufgabe abgeschlossen ist.When control reaches an await expression in the async method, control returns to the caller, and progress in the method is suspended until the awaited task completes. Wenn die Aufgabe abgeschlossen ist, kann die Ausführung in der Methode fortgesetzt werden.When the task is complete, execution can resume in the method.

Ein einfaches Beispiel finden Sie im Abschnitt „Async-Methoden“ unter Methoden.For a simple example, see the "Async Methods" section of Methods. Weitere Informationen finden Sie unter Asynchrone Programmierung mit Async und Await.For more information, see Asynchronous Programming with async and await.
Die Anweisung yield returnThe yield return statement Ein Iterator führt eine benutzerdefinierte Iteration durch eine Auflistung durch, z. B. eine Liste oder ein Array.An iterator performs a custom iteration over a collection, such as a list or an array. Ein Iterator verwendet die Anweisung yield return, um jedes Element einzeln nacheinander zurückzugeben.An iterator uses the yield return statement to return each element one at a time. Wenn eine yield return-Anweisung erreicht wird, wird die aktuelle Position im Code gespeichert.When a yield return statement is reached, the current location in code is remembered. Wenn der Iterator das nächste Mal aufgerufen wird, wird die Ausführung von dieser Position neu gestartet.Execution is restarted from that location when the iterator is called the next time.

Weitere Informationen finden Sie unter Iteratoren.For more information, see Iterators.
Die Anweisung fixedThe fixed statement Die fixed-Anweisung verhindert, dass der Garbage Collector eine bewegliche Variable verschiebt.The fixed statement prevents the garbage collector from relocating a movable variable. Weitere Informationen finden Sie unter fixed.For more information, see fixed.
Die Anweisung lockThe lock statement Die lock-Anweisung hilft Ihnen, den Zugriff auf Codeblöcke auf jeweils einen Thread zu beschränken.The lock statement enables you to limit access to blocks of code to only one thread at a time. Weitere Informationen finden Sie unter lock.For more information, see lock.
Anweisungen mit BezeichnungLabeled statements Sie können einer Anweisung eine Bezeichnung geben, und anschließend mit dem Schlüsselwort goto zu der Anweisung mit Bezeichnung springen.You can give a statement a label and then use the goto keyword to jump to the labeled statement. (Ein Beispiel finden Sie in der folgenden Zeile.)(See the example in the following row.)
Die leere AnweisungThe empty statement Die leere Anweisung besteht aus einem einzelnen Semikolon.The empty statement consists of a single semicolon. Sie führt keine Aktion aus und kann an Orten verwendet werden, an denen eine Anweisung erforderlich ist, aber keine Aktion ausgeführt werden muss.It does nothing and can be used in places where a statement is required but no action needs to be performed. Die folgenden Beispiele zeigen zwei Verwendungen für eine leere Anweisung:The following examples show two uses for an empty statement:

void ProcessMessages()
{
    while (ProcessMessage())
        ; // Statement needed here.
}

void F()
{
    //...
    if (done) goto exit;
//...
exit:
    ; // Statement needed here.
}

Eingebettete AnweisungenEmbedded Statements

Einige Anweisungen, z.B. do, while, for und foreach, haben immer eine eingebettete Anweisung, die diesen folgt.Some statements, including do, while, for, and foreach, always have an embedded statement that follows them. Diese eingebettete Anweisung kann entweder eine einzelne Anweisung oder mehrerer Anweisungen durch geschweifte Klammern in einem Anweisungsblock sein.This embedded statement may be either a single statement or multiple statements enclosed by {} brackets in a statement block. In geschweiften Klammern können sogar einzeilige eingebettete Anweisungen eingeschlossen werden, wie im folgenden Beispiel gezeigt wird:Even single-line embedded statements can be enclosed in {} brackets, as shown in the following example:

// Recommended style. Embedded statement in  block.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
{
    System.Console.WriteLine(s);
}

// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
                        System.Environment.CurrentDirectory))
    System.Console.WriteLine(s);

Eine eingebettete Anweisung, die nicht in geschweifte Klammern eingeschlossen ist, darf keine Deklarationsanweisung oder eine Anweisung mit Bezeichnung sein.An embedded statement that is not enclosed in {} brackets cannot be a declaration statement or a labeled statement. Dies wird im folgenden Beispiel gezeigt:This is shown in the following example:

if(pointB == true)
    //Error CS1023:
    int radius = 5; 

Fügen Sie die eingebettete Anweisung in einen Block ein, um den Fehler zu beheben:Put the embedded statement in a block to fix the error:

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

Geschachtelte AnweisungsblöckeNested Statement Blocks

Anweisungsblöcke können geschachtelt werden, wie im folgenden Code gezeigt wird:Statement blocks can be nested, as shown in the following code:

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }

}
return "Not found.";

Nicht erreichbare AnweisungenUnreachable Statements

Wenn der Compiler festlegt, dass der Steuerungsablauf nie auf eine bestimmte Anweisung unter jeglichen Umständen zugreifen kann, wird die Warnung CS0162 erzeugt, wie im folgenden Beispiel gezeigt wird:If the compiler determines that the flow of control can never reach a particular statement under any circumstances, it will produce warning CS0162, as shown in the following example:

// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide