try-finally (C#-Referenz)

Aktualisiert: November 2007

Der finally-Block gibt alle Ressourcen frei, die im try-Block reserviert wurden, und führt den Code aus, der trotz Eintreten einer Ausnahme ausgeführt werden soll. Die Steuerung wird immer an den finally-Block übergeben, unabhängig davon, wie der try-Block beendet wird.

Während mithilfe von catch Ausnahmen behandelt werden, die in einem Anweisungsblock auftreten, wird mithilfe von finally sichergestellt, dass ein Anweisungscodeblock ausgeführt wird, unabhängig davon, wie der vorherige try-Block verlassen wird.

Beispiel

In diesem Beispiel ist eine unzulässige Konvertierungsanweisung enthalten, durch die eine Ausnahme verursacht wird. Wenn Sie das Programm ausführen, wird eine Laufzeitfehlermeldung angezeigt. Die finally-Klausel wird aber trotzdem ausgeführt und zeigt die Ausgabe an.

public class ThrowTest
{
    static void Main()
    {
        int i = 123;
        string s = "Some string";
        object o = s;

        try
        {
            // Invalid conversion; o contains a string not an int
            i = (int)o;
        }
        finally
        {
            Console.Write("i = {0}", i);
        }
    }
}

Durch das oben aufgeführte Beispiel wird System.InvalidCastException ausgelöst.

Obwohl eine Ausnahme abgefangen wurde, wird die Ausgabeanweisung im finally-Block trotzdem ausgeführt, d. h.:

i = 123

Weitere Informationen über finally finden Sie unter try-catch-finally.

C# bietet auch die using-Anweisung, die eine bequeme Syntax für genau dieselbe Funktionalität wie eine try-finally-Anweisung darstellt.

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 5.3.3.14 Try-finally-Anweisungen

  • 8.11 Die try-Anweisung

  • 16 Ausnahmen

Siehe auch

Aufgaben

Gewusst wie: Explizites Auslösen von Ausnahmen

Konzepte

C#-Programmierhandbuch

Referenz

C#-Schlüsselwörter

The try, catch, and throw Statements

Ausnahmebehandlungsanweisungen (C#-Referenz)

throw (C#-Referenz)

try-catch (C#-Referenz)

Weitere Ressourcen

C#-Referenz