Back-End

8 jul, 2015

Visual C# 6.0 – Selecionando exceções em um bloco Try…Catch

Publicidade

Hoje vou mostrar o novo recurso do Visual C# 6.0 que será lançado com o Visual Studio 2015 para selecionar exceções em um bloco try…catch. Para isso, estou usando a versão RC do Visual Studio 2015.

Se você conhece a linguagem VB .NET, sabe que podemos utilizar a cláusula When para selecionar exceções em um bloco try…catch. Pois bem, esse recurso também foi implementado no Visual C# em sua versão 6.0.

Apenas para lembrar a sintaxe do VB .NET:

Try
     [ tryStatements ]
     [ Exit Try ]
 [ Catch [ exception [ As type ] ] [ When expression ]
     [ catchStatements ]
     [ Exit Try ] ]
 [ Catch ... ]
 [ Finally
     [ finallyStatements ] ]
 End Try

Onde a cláusula When expession tem o seguinte significado:

 

When Opcional. Uma declaração de Catch com uma cláusula de When captura exceções somente quando expression é avaliada como True. Uma cláusula When é aplicada somente após verificar o tipo de exceção, e expression pode se referir ao identificador que representa a exceção.
expression Opcional. Deve ser implicitamente  conversível para Boolean. Qualquer expressão que descrever um filtro genérico. Normalmente usado para filtrar por número de erro.Usado com a palavra-chave de When para especificar as condições sob as quais o erro será capturado.

Agora o desenvolvedor C# pode fazer o tratamento de exceções usando também a cláusula When, conforme vemos no trecho de código a seguir, obtido na versão Visual Studio 20115 RC:

  try
            {
                // Executa o codigo
                //...
            }
            catch (SqlException ex) when (ex.Server == ".\\SQLEXPRESS")
            {
                Console.WriteLine("SQL Provider Error: " + ex.Message);
            }
            catch (Exception ex) when (ex.InnerException.ToString() == "Parameter Error")
            {
                Console.WriteLine("SQL Provider Error: " + ex.Message);
            }
            finally
            {
                nResultado = -1;
            }

Nota: Vi alguns exemplos usando a cláusula if no lugar do When, mas na versão Release Candidate do Visual Studio 2015 somente a cláusula When funcionou.

Na figura abaixo vemos que, ao usar a cláusula if, o compilador indicou um erro de sintaxe informando que espera a cláusula When:

vs_news251

Dessa forma, parece que a partir da versão Release Candidate do Visual Studio 2015 a condição definida na cláusula try…catch usa a palavra reservada When.