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 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||
|