Podia dar um exemplo de uso da diferença de throw x throw ex, mostrando inclusive os efeitos na stackTrace?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Podia dar um exemplo de uso da diferença de throw x throw ex, mostrando inclusive os efeitos na stackTrace?
Olá Angelo, bom dia, tudo bem?
Claro, vou te dar um exemplo de uso da diferença entre throw e throw ex.
Suponha que você esteja desenvolvendo um sistema de cadastro de usuários e, ao tentar salvar um novo usuário no banco de dados, ocorra um erro de conexão com o banco. Nesse caso, você pode capturar a exceção e lançar uma nova exceção personalizada para o usuário final, informando que houve um erro ao salvar o usuário.
Veja o exemplo abaixo:
try
{
// código para salvar o usuário no banco de dados
}
catch (SqlException ex)
{
// captura a exceção de conexão com o banco de dados
throw new Exception("Erro ao salvar o usuário. Tente novamente mais tarde.", ex);
}No exemplo acima, estamos capturando a exceção SqlException que pode ocorrer ao tentar salvar o usuário no banco de dados. Em seguida, estamos lançando uma nova exceção do tipo Exception, com uma mensagem personalizada para o usuário final e passando a exceção original como parâmetro para o construtor da nova exceção.
Se utilizarmos o throw ex, a stackTrace da exceção original será perdida e a stackTrace da nova exceção será iniciada a partir do ponto onde a nova exceção foi lançada. Já se utilizarmos apenas o throw, a stackTrace da exceção original será mantida e a stackTrace da nova exceção será iniciada a partir do ponto onde a exceção original foi lançada.
Espero ter ajudado e bons estudos!
Andre, vou testar aqui para visuzliar melhor, obrigado pela resposta.