Ausnahmen und Ausnahmebehandlung (C#-Programmierhandbuch)

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. 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. Ausnahmen können von der Common Language Runtime (CLR), vom .NET Framework bzw. anderen Drittanbieterbibliotheken oder vom Anwendungscode generiert werden. Ausnahmen werden mit dem Schlüsselwort throw erstellt.

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 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. Wenn kein geeigneter catch-Block in der Aufrufliste gefunden wird, beendet die CLR den Prozess und zeigt eine Meldung für den Benutzer an.

In diesem Beispiel testet eine Methode, ob eine Division durch Null möglich ist, und fängt den Fehler ab. Ohne Ausnahmebehandlung würde dieses Programm mit dem Fehler DivideByZeroException wurde nicht behandelt beendet.

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 Ausnahmen

Ausnahmen weisen folgende Eigenschaften auf:

  • Bei Ausnahmen handelt es sich um Typen, die alle letztlich von System.Exception abgeleitet werden.

  • Verwenden Sie einen try-Block um die Anweisungen, die möglicherweise Ausnahmen auslösen.

  • Sobald eine Ausnahme im try-Block auftritt, springt der Steuerungsfluss zum ersten zugeordneten Ausnahmehandler, der sich an einer beliebigen Stelle in der Aufrufliste befindet. In C# wird das Schlüsselwort catch zum Definieren eines Ausnahmehandlers verwendet.

  • Wenn für eine bestimmte Ausnahme kein Ausnahmehandler vorhanden ist, beendet das Programm die Ausführung mit einer Fehlermeldung.

  • Fangen Sie Ausnahmen nur dann ab, wenn Sie sie behandeln und die Anwendung in einem bekannten Zustand belassen können. Wenn Sie System.Exception abfangen, lösen Sie diese mithilfe des Schlüsselworts throw am Ende des catch-Blocks erneut aus.

  • Wenn ein catch-Block eine Ausnahmevariable definiert, können Sie diese verwenden, um weitere Informationen zum Typ der aufgetretenen Ausnahme abzurufen.

  • Ausnahmen können von einem Programm mithilfe des Schlüsselworts throw explizit generiert werden.

  • Ausnahmeobjekte enthalten detaillierte Informationen über den Fehler, z.B. den Zustand der Aufrufliste und eine Textbeschreibung des Fehlers.

  • Code in einem finally-Block wird auch dann ausgeführt, wenn eine Ausnahme ausgelöst wurde. Verwenden Sie einen finally-Block, um Ressourcen freizugeben, beispielsweise um Streams oder Dateien zu schließen, die im try-Block geöffnet wurden.

  • Zusätzlich zum strukturierten Win32-Mechanismus zur Ausnahmebehandlung wurden im .NET Framework verwaltete Ausnahmen implementiert. 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).

Weitere Informationen zu Ausnahmen und zur Ausnahmebehandlung finden Sie in den folgenden Themen:

C#-Programmiersprachenspezifikation

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

Siehe auch

SystemException
C#-Programmierhandbuch
C#-Schlüsselwörter
throw
try-catch
try-finally
try-catch-finally
Ausnahmen
Ausnahmenhierarchie
Schreiben von zuverlässigem .NET-Code
Minidumps für bestimmte Ausnahmen