Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mão na massa- Aula 5 - InnerException Error

No exercício da aula 5, temos essa instrução:

try
{
    ContaCorrente conta1 = new ContaCorrente(4564, 789684);
    ContaCorrente conta2 = new ContaCorrente(7891, 456794);

    // conta1.Transferir(10000, conta2);
    conta1.Sacar(10000);
}
catch (OperacaoFinanceiraException e)
{
    Console.WriteLine(e.Message);
    Console.WriteLine(e.StackTrace);

    Console.WriteLine("Informações da INNER EXCEPTION (exceção interna):");

    Console.WriteLine(e.InnerException.Message);
    Console.WriteLine(e.InnerException.StackTrace);
}

Mas nesse ponto, as InnerExeption dão erro. aparece "System.NullReferenceException: 'Referência de objeto não definida para uma instância de um objeto.'"

No exercicio que baixei da aula seguinte, vi que foi excluído esse trecho de código.

Como fazer para chamar o InnerException a partir da nossa classe de erro?

1 resposta
solução!

Oi, Raul. Tudo bom?

Quem lança a exceção é o responsável por preencher a InnerException.

No caso, o método Sacar lança a SaldoInsuficienteException e não preenche a InnerException. Mas, o método Transferir faz isto no trecho recortado abaixo:

try
{
    Sacar(valor);
}
catch(SaldoInsuficienteException ex)
{
    ContadorTransferenciasNaoPermitidas++;
    throw new OperacaoFinanceiraException("Operação não realizada.", ex);
}

Então se você descomentar a chamada para o método Transferir conseguirá obter a InnerException que criamos no curso. De qualquer modo, seja uma exceção lançada e criada por você ou de uma outra biblioteca, como o .Net, não é sempre que a InnerException terá um valor.

O que você acha? Resolvi sua dúvida?

Abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software