Usar manipuladores de exceção filtrados pelo usuário
Os manipuladores de exceção filtrados por usuário capturam e tratam exceções com base nos requisitos que você define para a exceção. Esses manipuladores usam a instrução catch
com a palavra-chave when
(Catch
e When
no Visual Basic).
Essa técnica é útil quando um objeto de exceção em particular 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 do código de erro na expressão para selecionar apenas o erro específico que deseja manipular nessa cláusula catch
.
O exemplo a seguir ilustra o a instrução 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
A expressão da cláusula filtrada pelo usuário não é restrita de nenhuma forma. Se ocorrer uma exceção durante a execução da expressão filtrada pelo usuário, essa exceção será descartada e será considerado que a expressão do filtro foi avaliada como falsa. Nesse caso, o Common Language Runtime continua a pesquisar um manipulador para a exceção atual.
Combinar a exceção específica e as cláusulas filtradas pelo usuário
Uma instrução catch
pode contar a exceção específica e as cláusulas filtradas pelo usuário. O runtime testa primeiro a exceção específica. Se a exceção específica for bem-sucedida, o runtime executará o filtro do usuário. O filtro genérico pode conter uma referência à variável declarada no filtro da classe. Observe que a ordem das duas cláusulas do filtro não pode ser invertida.
O exemplo a seguir mostra uma exceção específica na instrução catch e a cláusula filtrada pelo usuário com o uso da 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