Freigeben über


Ausnahmen und Ausnahmebehandlung

Die Ausnahmebehandlungsfeatures der C#-Sprache helfen Ihnen bei unerwarteten oder außergewöhnlichen Situationen, die auftreten, wenn ein Programm ausgeführt wird. Bei der Ausnahmebehandlung werden die tryAktionen und catchfinally Schlüsselwörter verwendet, die möglicherweise nicht erfolgreich ausgeführt werden können, um Fehler zu behandeln, wenn Sie sich dafür entscheiden, dass dies sinnvoll ist, und anschließend Ressourcen zu bereinigen. Ausnahmen können von der Common Language Runtime (CLR), von .NET- oder Drittanbieterbibliotheken oder durch Anwendungscode generiert werden. Ausnahmen werden mithilfe des Schlüsselworts throw erstellt.

In vielen Fällen kann eine Ausnahme nicht von einer Methode ausgelöst werden, die Ihr Code direkt aufgerufen hat, sondern durch eine weitere Methode weiter unten im Aufrufstapel. Wenn eine Ausnahme ausgelöst wird, löst der CLR den Stapel ab, sucht nach einer Methode mit einem catch Block für den spezifischen Ausnahmetyp und führt den ersten solchen catch Block aus, der gefunden wird. Wenn im Aufrufstapel kein geeigneter catch Block gefunden wird, wird der Prozess beendet und dem Benutzer eine Meldung angezeigt.

In diesem Beispiel testet eine Methode die Division durch Null und fängt den Fehler ab. Ohne die Ausnahmebehandlung würde dieses Programm mit einem DivideByZeroException-Fehler beendet .

public class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new DivideByZeroException();
        return x / y;
    }

    public static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result;

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

Übersicht über Ausnahmen

Ausnahmen weisen die folgenden Eigenschaften auf:

  • Ausnahmen sind Typen, die letztendlich von System.Exception.
  • Verwenden Sie einen try Block um die Anweisungen, die Ausnahmen auslösen können.
  • Sobald eine Ausnahme im try Block auftritt, springt der Steuerfluss zum ersten zugeordneten Ausnahmehandler, der an einer beliebigen Stelle im Aufrufstapel vorhanden ist. In C# wird das catch Schlüsselwort verwendet, um einen Ausnahmehandler zu definieren.
  • Wenn kein Ausnahmehandler für eine bestimmte Ausnahme vorhanden ist, wird die Ausführung des Programms mit einer Fehlermeldung beendet.
  • Fangen Sie keine Ausnahme ab, es sei denn, Sie können sie behandeln und die Anwendung in einem bekannten Zustand belassen. Wenn Sie das throw Schlüsselwort am Ende des Blocks abfangenSystem.Exception, wiederholen Sie dies mithilfe des catch Schlüsselworts.
  • Wenn ein catch Block eine Ausnahmevariable definiert, können Sie sie verwenden, um weitere Informationen zum Typ der aufgetretenen Ausnahme zu erhalten.
  • Ausnahmen können durch ein Programm mithilfe des throw Schlüsselworts explizit generiert werden.
  • Ausnahmeobjekte enthalten detaillierte Informationen zum Fehler, z. B. den Status des Aufrufstapels und eine Textbeschreibung des Fehlers.
  • Code in einem finally Block wird unabhängig davon ausgeführt, ob eine Ausnahme ausgelöst wird. Verwenden Sie einen finally Block, um Ressourcen freizugeben, z. B. um Datenströme oder Dateien zu schließen, die try im Block geöffnet wurden.
  • Verwaltete Ausnahmen in .NET werden über den strukturierten Ausnahmebehandlungsmechanismus von Win32 implementiert. Weitere Informationen finden Sie unter Structured Exception Handling (C/C++) und A Crash Course on the Depths of Win32 Structured Exception Handling.

C#-Sprachspezifikation

Weitere Informationen finden Sie unter Ausnahmen in der C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.

Siehe auch