Używanie obsługi wyjątków filtrowanej przez użytkownika

Programy obsługi wyjątków filtrowane przez użytkownika przechwytują wyjątki i obsługują je na podstawie wymagań zdefiniowanych dla wyjątku. Te procedury obsługi używają instrukcji catch ze when słowem kluczowym (Catch i When w Visual Basic).

Ta technika jest przydatna, gdy określony obiekt wyjątku odpowiada wielu błędom. W takim przypadku obiekt zazwyczaj ma właściwość zawierającą określony kod błędu skojarzony z błędem. Możesz użyć właściwości kod błędu w wyrażeniu, aby wybrać tylko określony błąd, który chcesz obsłużyć w tej catch klauzuli.

Poniższy przykład ilustruje instrukcję catch/when .

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  

Wyrażenie klauzuli filtrowanej przez użytkownika nie jest w żaden sposób ograniczone. Jeśli podczas wykonywania wyrażenia filtrowanego przez użytkownika wystąpi wyjątek, ten wyjątek zostanie odrzucony, a wyrażenie filtru zostanie uznane za obliczone na wartość false. W takim przypadku środowisko uruchomieniowe języka wspólnego kontynuuje wyszukiwanie programu obsługi dla bieżącego wyjątku.

Łączenie określonego wyjątku i klauzul filtrowanych przez użytkownika

Instrukcja catch może zawierać zarówno określony wyjątek, jak i klauzule filtrowane przez użytkownika. Środowisko uruchomieniowe najpierw testuje określony wyjątek. Jeśli określony wyjątek powiedzie się, środowisko uruchomieniowe wykonuje filtr użytkownika. Filtr ogólny może zawierać odwołanie do zmiennej zadeklarowanej w filtrze klasy. Należy pamiętać, że nie można cofnąć kolejności dwóch klauzul filtru.

W poniższym przykładzie pokazano konkretny wyjątek w instrukcji catch , a także klauzulę filtrowaną przez użytkownika przy użyciu słowa kluczowego 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  

Zobacz też