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:
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.