Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel befasst sich mit Compilerdiagnosen im Zusammenhang mit dem Auslösen und Abfangen von Ausnahmen. Die folgenden Warnungen werden generiert, wenn ein Ausnahmefilter eine Konstante falseist:
- CS8359: Der Filterausdruck ist die Konstante „false“. Sie sollten erwägen, die catch-Klausel zu entfernen.
- CS8360: Der Filterausdruck ist eine Konstante 'false'; erwägen Sie, den try-catch-Block zu entfernen.
Entfernen eines konstanten False-Ausnahmefilters
- CS8359: Der Filterausdruck ist die Konstante „false“. Erwägen Sie, die catch-Klausel zu entfernen.
- CS8360: Der Filterausdruck ist eine Konstante 'false', erwägen Sie, den try-catch-Block zu entfernen
Eine catch-Klausel mit einem Filter, der immer false ist, behandelt niemals eine Ausnahme. Der Compiler meldet CS8360 , wenn die try Anweisung genau eine catch Klausel und keine finally Klausel enthält. In diesem Fall ist die gesamte try-catch Aussage unwirksam. Der Compiler meldet CS8359 , wenn die try Anweisung eine andere catch Klausel oder eine finally Klausel aufweist.
Im folgenden Beispiel wird CS8359 für den Filter erstellt, da eine andere catch Klausel eine Ausnahme verarbeiten kann. Der Compiler meldet auch unerreichbaren Code im Konstanten-False-Handler:
using System;
using System.IO;
try
{
Console.WriteLine(File.ReadAllText("data.txt"));
}
catch (InvalidOperationException ex) when (false) // CS8359
{
Console.Error.WriteLine(ex.Message);
}
catch (IOException ex)
{
Console.Error.WriteLine(ex.Message);
}
Entfernen Sie die stets falsche catch Bedingung. Wenn die Klausel einige Ausnahmen behandeln soll, ersetzen Sie den konstanten Ausdruck durch eine sinnvolle Laufzeitbedingung.
Das folgende Beispiel erzeugt CS8360 im Filter, weil sich der Filter mit dem konstanten Wert false in der einzigen catch-Klausel befindet und die Anweisung keine finally-Klausel hat. Der Compiler meldet auch nicht erreichbaren Code im Handler:
using System;
using System.IO;
try
{
Console.WriteLine(File.ReadAllText("data.txt"));
}
catch (InvalidOperationException ex) when (false) // CS8360
{
Console.Error.WriteLine(ex.Message);
}
Entfernen Sie die try-catch Anweisung, während Sie die Anweisungen aus dem try Block beibehalten. Wenn der Handler bedingt erforderlich ist, ersetzen Sie den Konstantenfilter durch eine sinnvolle Laufzeitbedingung.
Weitere Informationen finden Sie unter "Vorteile von Ausnahmefiltern".