try-finally (C#-Referenz)

Der finally-Block ist für alle Ressourcen bereinigt, die im Prüfstand zugeordnet sind, und zum Ausführen von Code hilfreich, der ausgeführt werden muss, auch wenn eine Ausnahme in try-Block auftritt.In der Regel werden die Anweisungen eines finally-Blocks ausgeführt, wenn Steuerelement eine try-Anweisung, ob der Ablaufsprung aufgrund der normalen Ausführung der Ausführung von break, continue, gotooder return-Anweisung auftritt oder wenn der Weitergabe einer Ausnahme aus der try-Anweisung out wegläßt.

Innerhalb einer behandelten Ausnahme ist der zugeordnete finally-Block garantiert ausgeführt werden.Wenn die Ausnahme nicht behandelt wird, ist die Ausführung des Blocks finally hängt davon ab, wie der Ausnahme entladungs Vorgang gestartet wird.Dies ist wiederum je nachdem, wie der Computer eingerichtet ist.Weitere Informationen finden Sie unter Unhandled Exception Processing in the CLRunter.

Normalerweise wenn ein Ausnahmefehler eine Anwendung beendet, ob der finally-Block ausgeführt wird, ist nicht von Bedeutung.Wenn Sie jedoch finally-Anweisungen in einem Block verfügen, der selbst in dieser Situation ausgeführt werden muss, ist eine Projektmappe, catch einen Block der try- Anweisungfinally hinzuzufügen.Sie können auch die Ausnahme abfangen, die in den try-Block einer try- Anweisungfinally einer höheren Position in der Aufrufliste aufwärts ausgelöst wird.Das heißt, Sie können die Ausnahme in der Methode ab, die die Methode aufgerufen wird, die die try-finally-Anweisung oder in der Methode, in der diese Methode aufruft oder in einer Methode in der Aufrufliste enthält.Wenn die Ausnahme nicht abgefangen wird, hängt die Ausführung des finally-Blocks davon ab, ob das Betriebssystem wählt, um einen Vorgang entladungs Ausnahme auszulösen.

Beispiel

Im folgenden Beispiel wird eine unzulässige Konvertierung System.InvalidCastException-Anweisung eine Ausnahme.Die nicht behandelte Ausnahme ist.

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

        try
        {
            // Invalid conversion; obj contains a string, not a numeric type.
            i = (int)obj;

            // The following statement is not run.
            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("\nExecution of the finally block after an unhandled\n" +
                "error depends on how the exception unwind operation is triggered.");
            Console.WriteLine("i = {0}", i);
        }
    }
    // Output:
    // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
    //
    // Execution of the finally block after an unhandled
    // error depends on how the exception unwind operation is triggered.
    // i = 123
}

Im folgenden Beispiel wird eine Ausnahme von der TryCast-Methode in einer Methode am häufigsten in der Aufrufliste aufwärts abgefangen.

public class ThrowTestB
{
    static void Main()
    {
        try
        {
            // TryCast produces an unhandled exception.
            TryCast();
        }
        catch (Exception ex)
        {
            // Catch the exception that is unhandled in TryCast.
            Console.WriteLine
                ("Catching the {0} exception triggers the finally block.",
                ex.GetType());

            // Restore the original unhandled exception. You might not
            // know what exception to expect, or how to handle it, so pass 
            // it on.
            throw;
        }
    }

    public static void TryCast()
    {
        int i = 123;
        string s = "Some string";
        object obj = s;

        try
        {
            // Invalid conversion; obj contains a string, not a numeric type.
            i = (int)obj;

            // The following statement is not run.
            Console.WriteLine("WriteLine at the end of the try block.");
        }
        finally
        {
            // Report that the finally block is run, and show that the value of
            // i has not been changed.
            Console.WriteLine("\nIn the finally block in TryCast, i = {0}.\n", i);
        }
    }
    // Output:
    // In the finally block in TryCast, i = 123.

    // Catching the System.InvalidCastException exception triggers the finally block.

    // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
}

Weitere Informationen zu finallyfinden Sie unter try-catch-finally.

C# enthält auch using-Anweisung, das eine zweckmäßige Syntax für die gleiche Funktionalität wie eine try-finally-Anweisung bereitstellt.

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

Versuch, Erfassung und throw-Anweisungen (C++)

Ausnahmebehandlungsanweisungen (C#-Referenz)

throw (C#-Referenz)

try-catch (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz