Tratamento de Exceções em C# - Parte 3

Hoje, seguiremos nossa série e explicaremos como tratar exceções específicas. O C# nos permite tratar vários tipos de exceções, para isso, basta termos um bloco Catch para cada tipo de exceção a ser tratada.

Olá pessoal, hoje continuaremos a falar sobre tratamento de exceções no C#.

 

Na primeira parte sobre tratamento de exceções, nós apresentamos a estrutura básica do tratamento de exceções em C#. Na segunda parte, vimos como extrair mais detalhes de nossas exceções tratadas.

 

Hoje, seguiremos nossa série e explicaremos como tratar exceções específicas. O C# nos permite tratar vários tipos de exceções, para isso, basta termos um bloco Catch para cada tipo de exceção a ser tratada.

 

Não sei se lembram, mas no último artigo mostramos como obter o nome da classe da exceção, e na ocasião tivemos uma FormatException. No exemplo de hoje, forçaremos duas exceções e veremos como é possível realizar tratamentos expecíficos de acordo com o erro apresentado.

 

Para nosso exemplo, crie uma nova aplicação WindowsForms, adicione um botão na mesma e insira o seguinte código no evento Click do botão.

 

 

String str = "4837484789374893748397";

int num = 0;

 

try

{

num = Convert.ToInt32(str);

}

catch (FormatException E)

{

MessageBox.Show("Ocorreu um erro de conversão.\n" +

"Erro: " + E.Message + "\n" +

"________________________________________________________\n" +

"Pilha de execução: " + E.StackTrace + "\n" +

"________________________________________________________\n" +

"Classe da exceção: " + E.GetType().Name + "\n" +

"________________________________________________________\n" +

"Origem da exceção: " + E.Source + "\n");

}

finally {

MessageBox.Show("Tentativa de conversão realizada");

}

 

Observe as mudanças que fizemos no código. Alteramos o bloco cacth para tratar apenas exceções do tipo FormatException e alteramos o valor inicial da variável str.

 

Com isso, ao executarmos o programa, não receberemos a mensagem do bloco Catch, pois ao converter não teremos uma exceção do tipo FormatException, mas sim uma de um tipo de diferente, pois agora o erro que dá é devido ao valor ser muito grande.

 

Com isso, podemos inserir mais um bloco catch para tratar exceções diferentes de FormatException. Veja no exemplo abaixo:

 

String str = "4837484789374893748397";

int num = 0;

 

try

{

num = Convert.ToInt32(str);

}

catch (FormatException E)

{

MessageBox.Show("Ocorreu um erro de formato na conversão" + E.Message);

}

catch (ArithmeticException E)

{

MessageBox.Show("O valor convertido é muito grande." + E.Message);

}

catch (Exception E)

{

MessageBox.Show("Ocorreu um erro desconhecido na conversão." + E.Message);

}

 

finally {

MessageBox.Show("Tentativa de conversão realizada");

}

 

Como podemos ver, agora tratamos a exceção FormatException, ArithmeticException, e as mais genéricas, Exception. Ou seja, o bloco catch a ser executado, será aquela cuja exceção tratada seja do tipo correspondente à exceção gerada no bloco protegido.

 

Quando usamos este tipo de tratamento, é interessante sempre iniciarmos o mesmo a partir da exceção mais concreta(FormatException e ArithmeticException) para a mais genérica(Exception), pois ele sempre entrará no primeiro bloco cacth de tipo compatível com a exceção gerada.

 

 

É isso aí pessoal, vamos ficando por aqui, espero que tenham gostado e que as informações passadas sejam úteis no seu dia-a-dia.

Ricardo Coelho.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados