0Pricing
C# Academy · Aula

try/catch/finally, throw new versus relançamento

Use try/catch/finally para um tratamento previsível de erros; entenda throw new versus relançamento; mantenha os exemplos pequenos e objetivos.

try/catch/finally, throw new versus relançamento é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Visão geral das exceções

Objetivo: tratar e propagar erros com segurança.

  • try/catch: trate exceções específicas
  • finally: sempre é executado para a limpeza
  • throw new versus relançamento
  • Mantenha os manipuladores curtos; não oculte erros

Captura específica

Capture a exceção mais específica que você espera; mantenha o manipulador curto e claro.

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Start");
    try
    {
      int x = 10;
      int y = 0; // will cause DivideByZeroException
      Console.WriteLine(x / y);
    }
    catch (DivideByZeroException ex)
    {
      Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
    }
    Console.WriteLine("Continue");
  }
}

Ordem das capturas

A ordem importa: coloque as capturas específicas primeiro e uma captura genérica de Exception por último, como rede de segurança.

using System;

public class Program
{
  static int ParseAndDivide(string text, int divisor)
  {
    // Throws FormatException or DivideByZeroException
    int value = int.Parse(text);
    return value / divisor;
  }

  public static void Main(string[] args)
  {
    try
    {
      Console.WriteLine(ParseAndDivide("not-a-number", 2));
    }
    catch (FormatException)
    {
      Console.WriteLine("Bad number format");
    }
    catch (Exception ex)
    {
      // Fallback last
      Console.WriteLine("Other error: " + ex.GetType().Name);
    }
  }
}

finally para limpeza

Coloque a limpeza em finally. Ela é executada independentemente de ocorrer uma exceção ou não.

using System;

public class Program
{
  static bool opened = false;

  static void UseFakeResource()
  {
    try
    {
      opened = true;
      Console.WriteLine("Open");
      throw new InvalidOperationException("boom");
    }
    catch (InvalidOperationException)
    {
      Console.WriteLine("Handled");
    }
    finally
    {
      opened = false; // cleanup path
      Console.WriteLine("Close");
    }
  }

  public static void Main(string[] args)
  {
    UseFakeResource();
    Console.WriteLine("Opened? " + opened);
  }
}

Relance corretamente

Use throw; para relançar e manter a pilha original. throw ex; a redefine. Envolva a exceção em uma nova somente quando estiver adicionando contexto.

using System;

public class Program
{
  static void BadRethrow()
  {
    try
    {
      Fail();
    }
    catch (Exception ex)
    {
      // Resets stack trace:
      throw ex; // BAD rethrow
    }
  }

  static void GoodRethrow()
  {
    try
    {
      Fail();
    }
    catch
    {
      // Preserves original stack trace:
      throw; // GOOD rethrow
    }
  }

  static void Fail()
  {
    throw new InvalidOperationException("fail");
  }

  public static void Main(string[] args)
  {
    try { BadRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
    }

    try { GoodRethrow(); }
    catch (Exception ex)
    {
      Console.WriteLine("Good: preserves original stack");
    }
  }
}

Diretrizes de tratamento

Diretrizes:

  • Capture quando puder tratar o erro ou adicionar contexto.
  • Caso contrário, deixe a exceção subir.
  • Mantenha os manipuladores pequenos; evite engolir exceções silenciosamente.
  • Use finally para a limpeza; o descarte de recursos será abordado na próxima lição.

Regra do relançamento

Verificação rápida: qual instrução relança corretamente a exceção atual, preservando o rastreamento original da pilha?

Recapitulação

Recapitulação: use try/catch para erros específicos, finally para a limpeza e prefira throw; ao relançar, para manter a pilha original.

Perguntas Frequentes

A aula “try/catch/finally, throw new versus relançamento” é grátis?

Sim — o texto completo de “try/catch/finally, throw new versus relançamento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “try/catch/finally, throw new versus relançamento”?

Use try/catch/finally para um tratamento previsível de erros; entenda throw new versus relançamento; mantenha os exemplos pequenos e objetivos. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 3.

Quanto tempo leva a aula “try/catch/finally, throw new versus relançamento”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. try/catch/finally, throw new versus relançamento
  2. Exceções personalizadas; projeto de erros
  3. IDisposable, instrução using
← Voltar para C# Academy