Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice:


       

Índice
exclude.*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
languagec#
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
iconfalse
Informações
iconfalse

Produto: Framework

Informações
iconfalse

Versão: 12.01.XX

Informações
iconfalse

Processo: Throw em Exception

Informações
iconfalse
Informações
iconfalse

Status: Finalizado

Informações
iconfalse

Data: 15/01/2018

Informações
iconfalse

Autores:

Douglas Maxwell de Oliveira

Gabriel Dias De Oliveira Silva

Gustavo Henrique De Matos Rocha

Usuário desconhecido (fernando.souza)

Karina Dos Santos Costa

Rogerio De Resende Ohashi