Usar manipuladores de exceção filtrados pelo usuário
Os manipuladores de exceções filtrados pelo usuário capturam e manipulam exceções com base nos requisitos definidos para a exceção. Esses manipuladores usam a catch
instrução com a when
palavra-chave (Catch
e When
no Visual Basic).
Essa técnica é útil quando um objeto de exceção específico corresponde a vários erros. Nesse caso, o objeto normalmente tem uma propriedade que contém o código de erro específico associado ao erro. Você pode usar a propriedade error code na expressão para selecionar apenas o erro específico que deseja manipular nessa catch
cláusula.
O exemplo a seguir ilustra a catch
/when
declaração.
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
A expressão da cláusula filtrada pelo utilizador não é de forma alguma restringida. Se ocorrer uma exceção durante a execução da expressão filtrada pelo usuário, essa exceção será descartada e a expressão de filtro será considerada como tendo sido avaliada como falsa. Nesse caso, o common language runtime continua a busca por um manipulador para a exceção atual.
Combinar a exceção específica e as cláusulas filtradas pelo usuário
Uma catch
instrução pode conter a exceção específica e as cláusulas filtradas pelo usuário. O tempo de execução testa a exceção específica primeiro. Se a exceção específica for bem-sucedida, o tempo de execução executará o filtro do usuário. O filtro genérico pode conter uma referência à variável declarada no filtro de classe. Observe que a ordem das duas cláusulas de filtro não pode ser invertida.
O exemplo a seguir mostra uma exceção específica na instrução catch , bem como a cláusula user-filtered usando a palavra-chave 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