Filtro de exceções utilizando Try-Catch-When com c#

0

A partir da versão 6.0 a linguagem C inclui suporte a filtros de exceção que permite capturar um tipo específico de exceção se uma expressão associada for verdadeira. Você pode filtrar exceções, incluindo uma instrução when após a expressão catch.

A palavra-chave when funciona como um if. Uma condição when é uma expressão de predicado, que pode ser anexada a um bloco catch. Se a expressão do predicado for avaliada como verdadeira, o bloco de captura associado é executado; Caso contrário, o bloco catch é ignorado.

No exemplo abaixo, definimos um filtro que não captura a exceção da divisão por zero aos domingos:

    DateTime dia = DateTime.Now;
    CultureInfo idioma = new CultureInfo("pt-BR");

    int denominador;
    try
        {
            denominador = 0;
            int x = 5 / denominador;
        }
        // Captura a exceção todos os dias exceto no domingo
    catch (DivideByZeroException ex) when (dia.DayOfWeek != DayOfWeek.Sunday)
        {
        //exibe a data em português
            Console.WriteLine("Hoje é " + dia.ToString("D", idioma));
            Console.WriteLine(ex.Message);
        }
    Console.ReadKey();
    

Um caso de uso comum são tipos de exceção que são realmente um invólucro para vários tipos de erros diferentes.
Veja um outro exemplo:
 try
{
    DatabaseUpdate()
}
catch (SQLException e)
when (driver == "MySQL")
{
    //MySQL - tratamento de erros específicos e encerramento da exceção
}
catch (SQLException e)
when (driver == "Oracle")
{
    //Oracle - tratamento de erros específicos e encerramento da exceção
}
catch (SQLException e)
when (driver == "SqlServer")
{
    //Sql Server - tratamento de erros específicos e encerramento da exceção
}
A cláusula when permite expandir esse filtro para expressões genéricas.
Assim, você usa a cláusula when para casos em que o tipo da exceção não é suficientemente distinto para determinar se a exceção deve ser tratada aqui ou não.
Um grande abraço!
Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com