Verwenden benutzergefilterter Ausnahmehandler

Benutzergefilterte Handler fangen und behandeln Ausnahmen gemäß benutzerdefinierten Ausnahmeanforderungen. Diese Handler verwenden die catch Anweisung mit dem when Schlüsselwort (Catch und When in Visual Basic).

Dieses Verfahren ist nützlich, wenn ein bestimmtes Ausnahmeobjekt mehreren Fehlern entspricht. In diesem Fall hat das Objekt in der Regel eine Eigenschaft, die den speziellen Fehlercode enthält, der mit dem Fehler verknüpft ist. Sie können die Eigenschaft, die den Fehlercode enthält, im Ausdruck dazu verwenden, nur den bestimmten Fehler auszuwählen, den Sie in dieser catch-Klausel behandeln möchten.

Das folgende Beispiel zeigt die catch/when-Funktion.

try
{
    //Try statements.  
}
catch (Exception ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.  
    Catch When Err = VBErr_ClassLoadException
    'Catch statements.
End Try  

Der Ausdruck der benutzergefilterten Klausel ist in keiner Weise eingeschränkt. Tritt während der Ausführung des benutzergefilterten Ausdrucks eine Ausnahme auf, wird diese Ausnahme verworfen, und der Filterausdruck wird so bewertet, als habe er das Ergebnis „false“ gehabt. In diesem Fall setzt die Common Language Runtime die Suche nach einem Handler für die aktuelle Ausnahme fort.

Kombinieren der spezifischen Ausnahme und der vom Benutzer gefilterten Klauseln

Eine catch-Anweisung kann sowohl die spezielle Ausnahme als auch die benutzergefilterten Klauseln enthalten. Die Runtime prüft zuerst die spezielle Ausnahme. Wird die spezielle Ausnahme erfolgreich abgefangen, führt die Runtime den Benutzerfilter aus. Der allgemeine Filter kann einen Verweis auf die Variable enthalten, die im Klassenfilter deklariert ist. Die Reihenfolge der beiden Filterklauseln nicht umgekehrt werden.

Im folgenden Beispiel werden eine spezielle Ausnahme in der Catch-Anweisung sowie die benutzergefilterte Klausel mit dem Schlüsselwort When veranschaulicht.

try
{
    //Try statements.  
}
catch (System.Net.Http.HttpRequestException ex) when (ex.Message.Contains("404"))
{
    //Catch statements.
}
Try  
    'Try statements.
    Catch cle As ClassLoadException When cle.IsRecoverable()  
    'Catch statements.
End Try  

Siehe auch