Freigeben über


try-finally (C#-Referenz)

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;

                Console.WriteLine("WriteLine at the end of the try block.");
            }
            finally
            {
                // To run the program in Visual Studio, type CTRL+F5. Then 
                // click Cancel in the error dialog.
                Console.WriteLine("\nThe finally block is executed, even though"
                    + " an error was caught in the try block.");
                Console.WriteLine("i = {0}", i);
            }
        }
        // Output:
        // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
        // at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
        // 2010\Projects\ConsoleApplication9\Program.cs:line 21
        //
        // The finally block is executed, even though an error was caught in the try block.
        // i = 123
    }

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 der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Aufgaben

Gewusst wie: Explizites Auslösen von Ausnahmen

Referenz

C#-Schlüsselwörter

try, catch, and throw Statements (C++)

Ausnahmebehandlungsanweisungen (C#-Referenz)

throw (C#-Referenz)

try-catch (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Mai 2010

Im Ergebnis wurden Schreibanweisungen und Anweisungen hinzugefügt, um die Ergebnisse zu erläutern.

Kundenfeedback.