Partilhar via


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  

Consulte também