Por que eu devo ler este artigo:

Neste artigo veremos os conceitos sobre o tratamento de erros com os blocos Try e Catch, em C#. Normalmente, os aplicativos que desenvolvemos possuem diversas tarefas a serem executadas.

É possível que uma destas tarefas gere um erro ou exceção, isto é, uma ocorrência que faz com que o fluxo normal do programa seja alterado. Esse erro ou exceção pode ser simples ou complexo: em algumas situações, a execução do programa simplesmente continua, em outras ela pode ser interrompida abruptamente.

Por estes motivos, devemos dar atenção muito especial à detecção e manipulação de erros em nossas aplicações. No C#, contamos com um mecanismo sofisticado que nos auxilia a produzir códigos de manipulação organizados e muito eficientes, que é a manipulação de exceções.

Há vários motivos que podem fazer com que uma exceção seja lançada, tais como uma falha de hardware, por exemplo. O código que gera essa exceção fica separado do código de manipulação de exceções.

Exceções com try e catch – O manipulador de exceções é um código que captura a exceção lançada e a manipula. Sua principal vantagem é que precisamos escrever apenas uma vez o código de manipulação de uma exceção que pode ocorrer em uma região controlada.

O bloco de código onde as exceções podem ocorrer é chamado de região protegida. Ele é indicado pelo comando try. Para associarmos uma determinada exceção a um bloco de código que a manipulará, usamos uma ou mais cláusulas catch. Veja um exemplo:


try

            {

                //linha de código que pode disparar uma exceção

                int numero = Convert.ToInt32(txtValor.Text);

                int resultado = 100 / numero;

            }

            catch

            {

                //linha de código que trata o erro

                lblMensagem.Text = "Número inválido!";

            }

Podemos também capturar o erro e uma instância da classe Exception (o que é geralmente usado nas aplicações em geral):


try

            {

                int numero = Convert.ToInt32(txtValor.Text);

                int resultado = 100 / numero;

            }

            catch (Exception ex)

            {

                lblMensagem.Text = ex.Message;

            }

Como vimos acima, no bloco try colocamos os comandos que podem gerar exceção. Neste bloco, podem haver comandos que gerem exceções diferentes, e cada uma possui um catch correspondente. Nos códigos acima, podem ocorrer dois erros diferentes: divisão por zero e formato inválido de número.

Quando existirem um ou mais blocos catch, podemos capturar diversos tipos de exceções diferentes, porém devemos seguir algumas regras:

  • Eles devem ser colocados sempre depois do bloco try.
  • Não deve haver instrução ou bloco entre os blocos catch, ou seja, eles devem ser colocados um após o outro.
  • Os blocos catch devem seguir uma ordem (do mais específico ao mais genérico).

Veja um exemplo com vários blocos catch:


try

            {

                int numero = Convert.ToInt32(txtValor.Text);

                int resultado = 100 / numero;

            }

            catch (FormatException)

            {

                lblMensagem.Text = "Formato de número inválido!";

            }

            catch (DivideByZeroException)

            {

                lblMensagem.Text = "O número não pode ser zero!";

            }

            catch (Exception ex)

            {

                lblMensagem.Text = ex.Message;

            }

Na próxima parte veremos os conceitos sobre o throw e sobre o bloco finally com mais alguns exemplos para ilustrar nosso artigo.


Próximos

Novidade ;)

  • Cursos de .NET:
    Torne-se um programador .NET completo. Aprenda a desenvolver sites, web services e aplicações mobile utilizando a linguagem C# e os frameworks ASP.NET MVC, Web API, Entity Framework, Xamarin e mais.