Behandeln einer Ausnahme mit „try/catch“

Ein try/catch-Block soll von Arbeitscode generierte Ausnahmen abfangen und verarbeiten. Einige Ausnahmen können in einem catch-Block verarbeitet werden, und das Problem kann behoben werden, ohne dass die Ausnahme noch mal ausgelöst wird. Allerdings können Sie meistens nur sicherstellen, dass die passende Ausnahme ausgelöst wird.

Beispiel

In diesem Beispiel ist IndexOutOfRangeException nicht die passendste Ausnahme: Für diese Methode ist ArgumentOutOfRangeException sinnvoller, da der Fehler durch die Übergabe des Arguments index des Aufrufers verursacht wird.

static int GetInt(int[] array, int index)
{
    try
    {
        return array[index];
    }
    catch (IndexOutOfRangeException e)  // CS0168
    {
        Console.WriteLine(e.Message);
        // Set IndexOutOfRangeException to the new exception's InnerException.
        throw new ArgumentOutOfRangeException("index parameter is out of range.", e);
    }
}

Kommentare

Der Code, der eine Ausnahme auslöst, ist im try-Block eingeschlossen. Eine catch-Anweisung wird direkt danach hinzugefügt, um IndexOutOfRangeException zu verarbeiten, falls dies auftritt. Der catch-Block verarbeitet IndexOutOfRangeException und löst stattdessen die passendere ArgumentOutOfRangeException aus. Um dem Aufrufer so viele Informationen wie möglich bereitzustellen, können Sie die ursprüngliche Ausnahme auf InnerException der neuen Ausnahme festlegen. Da die Eigenschaft InnerExceptionschreibgeschützt ist, müssen Sie sie im Konstruktor der neuen Ausnahme zuweisen.