Pular para o conteúdo
.NETtry, catch e finally
Módulo 02Fundamentos de Aplicação

try, catch e finally

intermediario 24 min de leitura·Atualizado · .NET 9
Resumo

Exceções sinalizam erros em tempo de execução. try protege um bloco, catch trata tipos específicos de erro e finally executa limpeza sempre — com ou sem exceção.

1. Objetivos de Aprendizagem#

  • Capturar exceções por tipo.
  • Usar finally e using para limpeza.
  • Filtrar exceções com when.

2. Pré-requisitos#

  • Classes e herança (Módulo 05).

3. Conceito#

Uma exceção é um objeto (derivado de System.Exception) lançado quando algo dá errado. O fluxo:

  • try — bloco que pode falhar.
  • catch (TipoEx e) — trata um tipo específico; pode haver vários, do mais específico ao mais geral.
  • finally — roda sempre (sucesso ou falha), ideal para liberar recursos.
  • when — filtra o catch por condição.

O porquê: separar o caminho feliz do tratamento de erro, sem poluir a lógica com checagens a cada linha.

4. Mão na Massa#

4.1. Setup#

Shell
dotnet new console -n Catalog.Excecoes
cd Catalog.Excecoes

4.2. Implementação Passo a Passo#

  1. Captura por tipo + finally:
C#
try
{
    var texto = "abc";
    int numero = int.Parse(texto); // lança FormatException
}
catch (FormatException ex)
{
    Console.WriteLine($"Entrada inválida: {ex.Message}");
}
catch (Exception ex)               // rede de segurança (mais geral por último)
{
    Console.WriteLine($"Erro inesperado: {ex.Message}");
}
finally
{
    Console.WriteLine("Sempre executa (limpeza).");
}
  1. when (filtro):
C#
try { /* ... */ }
catch (IOException ex) when (ex.Message.Contains("disk"))
{
    Console.WriteLine("Problema específico de disco.");
}
  1. using para liberar recursos automaticamente:
C#
using var arquivo = new StreamReader("dados.txt");
var conteudo = arquivo.ReadToEnd(); // Dispose chamado ao sair do escopo

4.3. Executando#

Shell
dotnet run

5. Exemplo Completo#

O bloco try/catch/finally acima trata FormatException de forma específica, mantém uma rede de segurança geral e garante a limpeza no finally.

6. Boas Práticas e Armadilhas#

FaçaEvite
Capturar o tipo mais específico primeirocatch (Exception) engolindo tudo
Usar using para IDisposableEsquecer de liberar arquivos/conexões
Deixar exceções não recuperáveis subiremcatch vazio que esconde o problema
Atenção

exceções são para situações excepcionais, não para controle de fluxo normal. Para entradas previsíveis, prefira TryParse a capturar FormatException.

7. Segurança e Produção#

  • Nunca engula exceções silenciosamente: registre (log) antes de decidir continuar. Erros invisíveis são os mais caros de diagnosticar.

8. Exercícios#

  • Fácil: capture uma DivideByZeroException.
  • Médio: use finally para imprimir uma mensagem de encerramento.
  • Desafio: use catch when para tratar apenas um subconjunto de casos de uma mesma exceção.

9. Resumo#

try protege, catch trata por tipo (específico → geral), finally limpa sempre, when filtra. Use exceções para o excepcional e using para liberar recursos.

10. Próximos Passos#

A seguir, criar exceções próprias para o domínio.

11. Referências#

10-01 — try, catch e finally | Curso ASP.NET Core