Freigeben über


Fehler- und Ausnahmebehandlung (Visual C# Express)

Aktualisiert: November 2007

Tritt während der Ausführung eines C#-Programms ein Fehler auf, wird eine Ausnahme ausgelöst. Ausnahmen beenden den aktuellen Programmablauf. Falls nichts unternommen wird, bricht das Programm einfach ab. Ausnahmen können durch einen Programmfehler ausgelöst werden, z. B. durch den Versuch, eine Zahl durch 0 (null) zu dividieren. Sie können aber auch durch eine unerwartete Eingabe ausgelöst werden, wenn z. B. ein Benutzer eine nicht vorhandene Datei auswählt. Als Programmierer ist es Ihre Aufgabe, dafür zu sorgen, dass das Programm solche Probleme behandelt, ohne dabei abzustürzen.

C# stellt mehrere Schlüsselwörter zur Verfügung, und zwar try, catch und finally, mit deren Hilfe das Programm Ausnahmen entdeckt, behandelt und die Ausführung fortsetzt. Diese Schlüsselwörter sind sehr nützlich, um Anwendungen zuverlässiger zu machen.

Try und Catch

Die Schlüsselwörter try und catch werden gemeinsam verwendet. Mit try schließen Sie den Codeblock ein, von dem Sie befürchten, dass er eine Ausnahme auslöst, und catch enthält den Code, der bei Auftreten der Ausnahme ausgeführt werden soll. In diesem Beispiel löst eine Division durch 0 die entsprechende Ausnahme aus, die dann abgefangen wird. Ohne den try-Block und den catch-Block würde dieses Programm abbrechen.

class ProgramTryCatch
{
    static void Main()
    {
        int x=0, y=0;

        try
        {
            x = 10 / y;
        }

        catch (System.DivideByZeroException)
        {
            System.Console.WriteLine("There was an attempt to divide by zero.");
        }
    }
}

Es ist guter Programmierstil, den Ausnahmetyp möglichst präzise festzulegen, den der catch-Code auffangen soll. Einer try-Anweisung können mehrere catch-Anweisungen zugeordnet sein, die jede eine andere Ausnahme auffangen.

finally-Blöcke

In einem finally-Block enthaltener Code wird immer ausgeführt, egal ob eine Ausnahme auftritt oder nicht. Verwenden Sie den finally-Block, um sicherzustellen, dass Ressourcen freigegeben werden, z. B. eine Datei geschlossen wird.

try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
}
finally
{
    // Code to execute after try (and possibly catch) here.
}

Verwenden von Ausnahmebehandlungen

Ausnahmen bedeuten nicht zwangsläufig, dass ein katastrophales Problem im Programm aufgetreten ist. Sie sind oft ein probates Mittel, um einen Codeabschnitt zu verlassen, der für den weiteren Verlauf nicht mehr relevant ist, oder ein Hinweis, dass eine Methode erfolglos war. Viele .NET Framework-Klassenmethoden erstellen Ausnahmen, um vor einer bestimmten Bedingung zu warnen.

Sie können auch eigene Ausnahmen mit dem throw-Schlüsselwort auslösen. Beispiel:

class ProgramThrow
{
    static void DoWork(int x)
    {
        if (x > 5)
        {
            throw new System.ArgumentOutOfRangeException("X is too large");
        }
    }

    static void Main()
    {
        try
        {
            DoWork(10);
        }
        catch (System.ArgumentOutOfRangeException ex)
        {
            System.Console.WriteLine(ex.Message);
        }
    }
}

Verwenden Sie Ausnahmen im Programm, wenn Sie mit der Möglichkeit rechnen, dass eine unerwartete Situation auftritt. Wenn Sie beispielsweise Benutzereingaben bearbeiten, eine Datei lesen oder auf Informationen aus dem Internet zugreifen.

Siehe auch

Aufgaben

Gewusst wie: Abfangen einer Ausnahme (Visual C#)

Konzepte

Einführung in C#

Referenz

Ausnahmebehandlungsanweisungen (C#-Referenz)

throw (C#-Referenz)

try-catch (C#-Referenz)

try-finally (C#-Referenz)

try-catch-finally (C#-Referenz)