Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
Índice:
Índice | ||
---|---|---|
|
Objetivo:
Auxiliar na implementação/manutenção do Snowden.
Execução:
Devemos realizar throw new Exception(); ou throw ex; apenas se temos a intensão de modificar os dados da exceção. Caso contrário, deve-se utilizar apenas a throw; pois desta forma, o StackTrace da Exception é preservado.
Ex.:
Bloco de código | ||
---|---|---|
| ||
public static void Main(string[] args)
{
try
{
StackTraceIncompleto();
}
catch (Exception ex)
{
Console.WriteLine($"StackTraceIncompleto:{Environment.NewLine}{ex.StackTrace}");
}
try
{
StackTraceCompleto();
}
catch (Exception ex)
{
Console.WriteLine($"StackTraceCompleto:{Environment.NewLine}{ex.StackTrace}");
}
Console.Read();
}
private static void StackTraceIncompleto()
{
try
{
GerarException();
}
catch (Exception ex)
{
throw ex;
}
}
private static void StackTraceCompleto()
{
try
{
GerarException();
}
catch (Exception ex)
{
throw;
}
}
private static void GerarException()
{
InvalidOperationException ex = new InvalidOperationException("Teste");
throw ex;
} |
No código acima, a Exception propagada pelo método StackTraceCompleto contemplará o método GerarException enquanto o método StackTraceIncompleto não, perdendo informações importantes para a análise do problema.
Resultado:
StackTraceIncompleto:
em RM.ExceptionThrow.Program.StackTraceIncompleto() na c:\Projetos\RM.ExceptionThrow\RM.ExceptionThrow\Program.cs:linha 41
em RM.ExceptionThrow.Program.Main(String[] args) na c:\Projetos\RM.ExceptionThrow\RM.ExceptionThrow\Program.cs:linha 15
StackTraceCompleto:
em RM.ExceptionThrow.Program.GerarException() na c:\Projetos\RM.ExceptionThrow\RM.ExceptionThrow\Program.cs:linha 58
em RM.ExceptionThrow.Program.StackTraceCompleto() na c:\Projetos\RM.ExceptionThrow\RM.ExceptionThrow\Program.cs:linha 52
em RM.ExceptionThrow.Program.Main(String[] args) na c:\Projetos\RM.ExceptionThrow\RM.ExceptionThrow\Program.cs:linha 24
Desta forma, devemos sempre levar em consideração se a exceção será tratada ou apenas propagada no ponto do catch
Fonte: https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/throw
Informações | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|
Informações | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|