DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

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.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

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.



Graduado em Analise de Sistemas, Pós-graduando em Engenharia de software, mais de 7 anos de experiência em desenvolvimento de software, onde atuou em projetos de diversos seguimentos como varejo, telecomunicações, ERPs etc e nas m [...]

O que você achou deste post?
Conhece a assinatura MVP?
Publicidade
Serviços

Mais posts