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