Používání obslužných rutin uživatelem filtrovaných výjimek

Obslužné rutiny výjimek filtrované uživatelem zachytají a zpracovávají výjimky na základě požadavků, které definujete pro výjimku. Tyto obslužné rutiny používají catch příkaz s klíčovým slovem when (Catch a When v jazyce Visual Basic).

Tato technika je užitečná, když konkrétní objekt výjimky odpovídá více chybám. V tomto případě má objekt obvykle vlastnost, která obsahuje konkrétní kód chyby přidružený k chybě. Vlastnost kódu chyby ve výrazu můžete použít k výběru pouze konkrétní chyby, kterou chcete v této catch klauzuli zpracovat.

Následující příklad znázorňuje catch/when příkaz.

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  

Výraz klauzule filtrované uživatelem není nijak omezen. Pokud během provádění výrazu filtrovaného uživatelem dojde k výjimce, tato výjimka se zahodí a výraz filtru se považuje za vyhodnocený jako nepravda. V tomto případě modul CLR (Common Language Runtime) pokračuje ve vyhledávání obslužné rutiny pro aktuální výjimku.

Kombinování konkrétní výjimky a klauzulí filtrovaných uživatelem

Příkaz catch může obsahovat konkrétní výjimku i klauzule filtrované uživatelem. Modul runtime nejprve otestuje konkrétní výjimku. Pokud konkrétní výjimka proběhne úspěšně, modul runtime spustí filtr uživatele. Obecný filtr může obsahovat odkaz na proměnnou deklarovanou ve filtru třídy. Všimněte si, že pořadí dvou klauzulí filtru nelze vrátit zpět.

Následující příklad ukazuje konkrétní výjimku v příkazu catch a také klauzuli filtrovanou uživatelem pomocí klíčového slova when .

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  

Viz také