🎯 Objetivo: Neste capítulo, você aprenderá como o C# trata situações inesperadas que ocorrem durante a execução de um programa, conhecidas como exceções. Isso permite que você escreva programas mais seguros, robustos e controlados.
Imagine que seu programa é uma receita de bolo. Tudo está indo bem até que, de repente, você tenta adicionar "leite" mas o pote está vazio. Isso é uma situação inesperada que impede você de continuar a receita. Em programação, uma exceção representa exatamente isso: um evento que ocorre durante a execução de um programa e que perturba o seu fluxo normal. Se não for tratada, uma exceção pode fazer seu programa parar abruptamente (cair).
Exemplos Comuns de Exceções:
DivideByZeroException: Tentativa de divisão por zero.IndexOutOfRangeException: Tentativa de acessar um índice inválido em um array.FileNotFoundException: O programa tenta abrir um arquivo que não existe no caminho especificado.NullReferenceException: Você tenta usar um objeto que não foi inicializado (está nulo).FormatException: Tentativa de converter uma string para um número, mas a string não contém um formato numérico válido (ex: "abc" para int).Quando uma exceção não é tratada, o C# Runtime a "lança" (throws), o programa para e uma mensagem de erro (stack trace) é exibida no console.
public class ExemploErroSemTratamento
{
public static void Main(string[] args)
{
Console.WriteLine("Iniciando o programa...");
int[] numeros = { 10, 20, 30 };
// Tentamos acessar a posição 5 de um array de tamanho 3
Console.WriteLine(numeros[5]); // Isso causará uma IndexOutOfRangeException!
Console.WriteLine("Esta linha nunca será executada."); // O programa já parou
}
}
Saída (Exemplo de Stack Trace):
Iniciando o programa...
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at ExemploErroSemTratamento.Main(String[] args) in C:\...\ExemploErroSemTratamento.cs:line 8
Como você pode ver, o programa para na linha 8 e exibe uma longa mensagem de erro. Isso não é uma boa experiência para o usuário!
try e catchPara evitar que seu programa "quebre" ao encontrar uma exceção, você pode usar os blocos try e catch. Eles permitem que você tente executar um bloco de código que pode causar uma exceção e, se uma exceção ocorrer, capture-a e execute um "plano B" (o código de tratamento).
try: Contém o código que pode gerar uma exceção.catch: Contém o código que será executado se uma exceção do tipo especificado ocorrer dentro do bloco try.public class TratamentoBasicoExcecao
{
public static void Main(string[] args)
{
Console.WriteLine("Iniciando tratamento de exceção...");
try
{
// Código que pode gerar uma exceção
int[] numeros = { 10, 20, 30 };
Console.WriteLine("Tentando acessar indice 5: " + numeros[5]); // Pode lançar IndexOutOfRangeException
Console.WriteLine("Esta linha não será executada se a exceção acima ocorrer.");
}
catch (IndexOutOfRangeException e)
{
// Código que será executado se uma IndexOutOfRangeException for capturada
Console.WriteLine("ERRO: Você tentou acessar uma posição que não existe no array.");
Console.WriteLine("Detalhes técnicos: " + e.Message); // Exibe a mensagem da exceção
// Console.WriteLine(e.StackTrace); // Útil para depuração, imprime o stack trace completo
}
Console.WriteLine("Programa continuou após o tratamento da exceção.");
// O programa não parou!
}
}
Saída