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 Fehlercodeeigenschaft im Ausdruck verwenden, um nur den bestimmten Fehler auszuwählen, den Sie in dieser catch Klausel behandeln möchten.

Im folgenden Beispiel wird die catch/when Anweisung veranschaulicht.

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 spezifische Ausnahme als auch die vom Benutzer gefilterten 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 wird eine bestimmte Ausnahme in der Catch-Anweisung sowie die vom Benutzer gefilterte Klausel mithilfe des Schlüsselworts gezeigt.

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