O bloco try-catch é o pilar do tratamento de exceções em C#. Ele nos permite isolar um código que pode falhar e definir um plano de ação para quando a falha de fato ocorrer.
O funcionamento é direto:
try: O código que pode potencialmente lançar uma exceção é colocado aqui. O programa tenta executá-lo normalmente.
catch: Se, e somente se, uma exceção ocorrer no bloco try, a execução normal é interrompida e o controle pula imediatamente para o bloco catch. É o nosso "plano de contingência".
try
{
// Code that might cause an exception is placed here.
// For example, attempting to divide by zero.
int numerator = 10;
int denominator = 0;
int result = numerator / denominator; // This line will throw a DivideByZeroException.
// This line will never be reached because the exception occurs before it.
Console.WriteLine("Calculation successful!");
}
catch
{
// If the code in the try block fails, this code is executed.
Console.WriteLine("An error occurred during the calculation.");
}
Capturando Detalhes da Exceção
Na maioria das vezes, apenas saber que um erro ocorreu não é suficiente. Precisamos de detalhes: o que deu errado? Onde?
Para isso, podemos capturar a exceção em um objeto dentro do bloco catch. Esse objeto, geralmente chamado de ex por convenção, contém informações valiosas para depuração.
As propriedades mais usadas são:
ex.Message: Uma string que descreve o erro.
ex.StackTrace: Um "rastro" de texto que mostra exatamente em qual método o erro ocorreu e a sequência de chamadas que levou até ele.
try
{
int numerator = 10;
int denominator = 0;
int result = numerator / denominator;
}
catch (Exception ex)
{
// We catch the Exception object to get more details.
Console.WriteLine("An exception was caught!");
Console.WriteLine($"Error Message: {ex.Message}");
// The StackTrace is very useful for debugging but can be long.
// Console.WriteLine($"Stack Trace: {ex.StackTrace}");
}