Ausnahmen und Ausnahmebehandlung (C#-Programmierhandbuch)Exceptions and Exception Handling (C# Programming Guide)

Die C#-Funktionen zur Ausnahmebehandlung helfen Ihnen dabei, unerwartete oder außergewöhnliche Situationen zu verarbeiten, die beim Ausführen von Programmen auftreten können.The C# language's exception handling features help you deal with any unexpected or exceptional situations that occur when a program is running. Die Ausnahmebehandlung verwendet die Schlüsselwörter try, catch und finally, um Aktionen zu testen, die möglicherweise nicht erfolgreich sind, um Fehler zu behandeln, wenn Sie entscheiden, dass dies vernünftig ist, und um später Ressourcen zu bereinigen.Exception handling uses the try, catch, and finally keywords to try actions that may not succeed, to handle failures when you decide that it is reasonable to do so, and to clean up resources afterward. Ausnahmen können von der Common Language Runtime (CLR), vom .NET Framework bzw. anderen Drittanbieterbibliotheken oder vom Anwendungscode generiert werden.Exceptions can be generated by the common language runtime (CLR), by the .NET Framework or any third-party libraries, or by application code. Ausnahmen werden mit dem Schlüsselwort throw erstellt.Exceptions are created by using the throw keyword.

In vielen Fällen wird eine Ausnahme nicht von einer Methode ausgelöst, die von Ihrem Code direkt aufgerufen wurde, sondern von einer anderen Methode weiter unten in der Aufrufliste.In many cases, an exception may be thrown not by a method that your code has called directly, but by another method further down in the call stack. In diesem Fall entlädt die CLR die Liste, sucht nach einer Methode mit einem catch-Block für den spezifischen Ausnahmetyp und führt den ersten gefundenen catch-Block aus.When this happens, the CLR will unwind the stack, looking for a method with a catch block for the specific exception type, and it will execute the first such catch block that if finds. Wenn kein geeigneter catch-Block in der Aufrufliste gefunden wird, beendet die CLR den Prozess und zeigt eine Meldung für den Benutzer an.If it finds no appropriate catch block anywhere in the call stack, it will terminate the process and display a message to the user.

In diesem Beispiel testet eine Methode, ob eine Division durch Null möglich ist, und fängt den Fehler ab.In this example, a method tests for division by zero and catches the error. Ohne Ausnahmebehandlung würde dieses Programm mit dem Fehler DivideByZeroException wurde nicht behandelt beendet.Without the exception handling, this program would terminate with a DivideByZeroException was unhandled error.

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Übersicht über AusnahmenExceptions Overview

Ausnahmen weisen folgende Eigenschaften auf:Exceptions have the following properties:

  • Bei Ausnahmen handelt es sich um Typen, die alle letztlich von System.Exception abgeleitet werden.Exceptions are types that all ultimately derive from System.Exception.

  • Verwenden Sie einen try-Block um die Anweisungen, die möglicherweise Ausnahmen auslösen.Use a try block around the statements that might throw exceptions.

  • Sobald eine Ausnahme im try-Block auftritt, springt der Steuerungsfluss zum ersten zugeordneten Ausnahmehandler, der sich an einer beliebigen Stelle in der Aufrufliste befindet.Once an exception occurs in the try block, the flow of control jumps to the first associated exception handler that is present anywhere in the call stack. In C# wird das Schlüsselwort catch zum Definieren eines Ausnahmehandlers verwendet.In C#, the catch keyword is used to define an exception handler.

  • Wenn für eine bestimmte Ausnahme kein Ausnahmehandler vorhanden ist, beendet das Programm die Ausführung mit einer Fehlermeldung.If no exception handler for a given exception is present, the program stops executing with an error message.

  • Fangen Sie Ausnahmen nur dann ab, wenn Sie sie behandeln und die Anwendung in einem bekannten Zustand belassen können.Do not catch an exception unless you can handle it and leave the application in a known state. Wenn Sie System.Exception abfangen, lösen Sie diese mithilfe des Schlüsselworts throw am Ende des catch-Blocks erneut aus.If you catch System.Exception, rethrow it using the throw keyword at the end of the catch block.

  • Wenn ein catch-Block eine Ausnahmevariable definiert, können Sie diese verwenden, um weitere Informationen zum Typ der aufgetretenen Ausnahme abzurufen.If a catch block defines an exception variable, you can use it to obtain more information about the type of exception that occurred.

  • Ausnahmen können von einem Programm mithilfe des Schlüsselworts throw explizit generiert werden.Exceptions can be explicitly generated by a program by using the throw keyword.

  • Ausnahmeobjekte enthalten detaillierte Informationen über den Fehler, z.B. den Zustand der Aufrufliste und eine Textbeschreibung des Fehlers.Exception objects contain detailed information about the error, such as the state of the call stack and a text description of the error.

  • Code in einem finally-Block wird auch dann ausgeführt, wenn eine Ausnahme ausgelöst wurde.Code in a finally block is executed even if an exception is thrown. Verwenden Sie einen finally-Block, um Ressourcen freizugeben, beispielsweise um Streams oder Dateien zu schließen, die im try-Block geöffnet wurden.Use a finally block to release resources, for example to close any streams or files that were opened in the try block.

  • Zusätzlich zum strukturierten Win32-Mechanismus zur Ausnahmebehandlung wurden im .NET Framework verwaltete Ausnahmen implementiert.Managed exceptions in the .NET Framework are implemented on top of the Win32 structured exception handling mechanism. Weitere Informationen finden Sie unter Structured Exception Handling (C/C++) (Strukturierte Ausnahmebehandlung [C/C++]) und A Crash Course on the Depths of Win32 Structured Exception Handling (Schnellkurs zu den Details der strukturierten Win32-Ausnahmebehandlung).For more information, see Structured Exception Handling (C/C++) and A Crash Course on the Depths of Win32 Structured Exception Handling.

Weitere Informationen zu Ausnahmen und zur Ausnahmebehandlung finden Sie in den folgenden Themen:See the following topics for more information about exceptions and exception handling:

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

SystemException
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
throwthrow
try-catchtry-catch
try-finallytry-finally
try-catch-finallytry-catch-finally
AusnahmenExceptions
AusnahmenhierarchieException Hierarchy
Schreiben von zuverlässigem .NET-CodeWriting Reliable .NET Code
Minidumps für bestimmte AusnahmenMinidumps for Specific Exceptions