Hoje em dia, alguns programadores estão deixando de utilizar o try, catch e finally; e na minha percepção eles estão tendo excesso de confiança no código desenvolvido. A grande questão aqui é que algum erro pode acontecer de forma inexperada e que não está no controle do programador como: cabo de rede fora, internet não funcionando, erro em HD, erro no SSD, erro de hardware em geral e muito mais.

O link da referência [1] mostra um pequeno exemplo de como trabalhar com os campos que conseguem pegar os erros. E com os erros pegos, o programador pode tratar os dados para não fechar o programa ou mostrar algo ruim para o usuário. Passando para a parte de tratar o erro dado, é importante saber como pegar o erro, como gravar e como tratar.

Quando o erro é gravado em algum local, muitas das vezes o progrador precisa saber qual o método que deu erro, ou qual foi o problema. É bom saber a linha, o motivo, o erro e mais. Uma das soluções é pegar o nome do método, pegar o nome da classe e o motivo do erro.

O código 1 mostra dentro do exception como pegar o nome do método, o nome da classe e todos os motivos.

Código 1 - Pegando o nome do método, classe e o motivo

public DataTable buscaAlunosParaEnvioDeEmail(AlunoDTO dto)
    {
        try
        {
            return _alunoDAO.buscaAlunosParaEnvioDeEmail(dto);
        }
        catch (Exception ex)
        {
            var metodo = this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
            var classe = this.GetType().Name.ToString();
            throw new Exception("Atenção: aconteceu um erro na classe: " + classe + " e método: " + metodo + ", tente novamente. <Br> Erro: " + ex.Message.ToString() + ex.Source.ToString() + ex.StackTrace.ToString(), ex.InnerException);
        }
    }

A primeira linha dentro do Exception é responsável por pegar o nome do método de forma completa.

Código 2 - Pegando o nome do método.

var metodo = this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();

Response.Write(this.GetType().FullName.ToString());

Veja o resultado da impressão e o que o código imprime é bem simples.

Para pegar o nome da classe, isso é necessário para que o programador saiba onde é a classe que deu problema. Como o projeto pode ser grande e muitos desenvolvedores mexeram, é bom identicar a classe também. Para identificar a classe é bem mais simples.

Código 3 - Pegando o nome da classe

var classe = this.GetType().Name.ToString();

No final de tudo, é necessário gerar uma Exception descrevendo cada detalhe. Isso porque os dados postados como erro precisam ser explicados já que tem o nome da classe e nome do método, precisamos pegar a descrição e o tipo do erro, na verdade, todas as informações necessárias.

throw new Exception("Atenção: aconteceu um erro na classe: " + classe + 
" e método: " + metodo + ", tente novamente. <Br> 
Erro: " + ex.Message.ToString() + ex.Source.ToString() + ex.StackTrace.ToString(), ex.InnerException);

Note que existe ainda o ex.Message, ex.Source, ex.StackTrace e ex.InnerException. A mensagem é a do sistema ou código fonte, o source é a fonte do problema, o statcktrace mostra cada linha traçada e o InnerException é a excessão causada naquela excessão.

Com tudo isso, você consegue saber qual classe, qual problema, qual foi o método e o que deu errado. Onde é muito importante no momento que o cliente te mostra a página de erro. O mais importante é gravar tudo isso de erro e deixar uma mensagem amigável ao seu cliente.

Espero que tenha ajudado e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org.

Referências

[1] - Usando try catch com o C#

[2] - Gravando erro no event log