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
- Throw, Finally - Tratamento de Erros:
Nesta parte veremos os conceitos sobre a palavra reservada throw, a cláusula finally e alguns exemplos sobre eles.
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.