Resumo : neste tutorial, você aprenderá como relançar uma exceção em C# usando a throw
instrução.
Quando relançar exceções em C#
Em C#, você pode usar o try...catch
bloco para capturar uma exceção no try
bloco e tratá-la adequadamente no catch
bloco.
Em alguns casos, você pode querer lançar novamente uma exceção depois de capturá-la no catch
bloco.
Isso pode ser útil se você precisar registrar a exceção primeiro e depois propagá-la na pilha de chamadas, que você tratará em outro catch
bloco.
O seguinte ilustra como relançar uma exceção:
try
{
// Some code that might throw an exception
}
catch (Exception ex)
{
// Handle the exception
Console.WriteLine($"An exception occurred: {ex.Message}");
// Rethrow the exception
throw;
}
Linguagem de código: C# ( cs )
Nesta sintaxe, o código no try
bloco pode gerar uma exceção. Se ocorrer uma exceção, nós a trataremos no catch
bloco.
No catch
bloco, tratamos a exceção mostrando uma mensagem ao console e a relançámos usando a throw
instrução.
Exemplo de exceções de relançamento em C#
O exemplo a seguir demonstra como relançar uma exceção usando a throw
instrução:
static float Divide(int a, int b)
{
return a / b;
}
try
{
var result = Divide(10, 0);
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex.Message);
// rethrow the exception
throw;
}
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina o Divide()
método que retorna a divisão de dois inteiros.
Segundo, divida 10 por zero usando o Divide
método. No bloco catch, registramos a mensagem de exceção no console e lançamos novamente a mesma DivideByZeroException
exceção.
Capturando e relançando outra exceção
Às vezes, você deseja tratar uma exceção e envolvê-la em uma nova exceção e propagar a nova exceção na pilha de chamadas.
Para fazer isso, você usa a throw
instrução com a nova exceção e passa a exceção original para o parâmetro de exceção interno da nova exceção. Por exemplo:
static float Divide(int a, int b)
{
return a / b;
}
try
{
var result = Divide(10, 0);
}
catch (DivideByZeroException ex)
{
Console.WriteLine(ex.Message);
// rethrow the exception
throw new ArithmeticException(ex.Message, ex);
}
Linguagem de código: C# ( cs )
Neste exemplo, registramos a mensagem da DivideByZeroException
exceção no console.
Além disso, envolvemos o
em uma nova DivideByZeroException
exceção atribuindo a ArithmeticException
exceção à DivideByZeroException
InnerException
propriedade da
exceção.ArithmeticException
O seguinte mostra ArithmeticException
with DivisionByZeroException
como a exceção interna:
Resumo
- Relançar uma exceção quando quiser fazer algo como registrar em log antes de propagar a mesma exceção na pilha de chamadas.
- Use a
throw
instrução para relançar a mesma exceção.