3
respostas

Não entra no bloco de exceção da NullReference

Olá, ao realizar a atividade Mãos na massa tive problemas ao realizar o teste do segundo tipo de exceção. O código para na linha em que ocorre a exceção, sem entrar no método que trata a mesma, no caso o Metodo(). O que eu devo estar fazendo errado?

namespace ByteBank
{
    class Program
    {
        static void Main(string[] args)
        {
            /*ContaCorrente joao = new ContaCorrente(123, 123456);
            Console.WriteLine(ContaCorrente.TaxaOperacao);*/

            try
            {
                Metodo();
            }
            catch (DivideByZeroException excecao)
            {
                Console.WriteLine(excecao.Message);
                Console.WriteLine(excecao.StackTrace);
            }

            Console.ReadLine();
        }

        static double Dividir (int numero, int divisor)
        {
            ContaCorrente conta = null;
            Console.WriteLine(conta.Saldo);
            return numero / divisor;
        }
        static void Metodo()
        {
            try
            {
                TestaDivisao(0);
            }
            catch (NullReferenceException excecao)
            {
                Console.WriteLine(excecao.Message);
                Console.WriteLine(excecao.StackTrace);
            }
        }
        static void TestaDivisao(int divisor)
        {
            Dividir(10, divisor);
        }
    }
}
3 respostas

Eai Rafael, Beleza?

Testei seu código e não encontrei nada de errado nele. Quando você diz que ele para no método em que ocorre a exceção, aparece essa telinha da imagem abaixo?

imagem detalhes exception

Se for isso, é apenas uma ajudinha do seu compilador dizendo que ocorreu uma exception no seu código. Não significa que ele "parou". Se você apertar F5, ou continuar a execução, ele deve entrar no catch que vai capturar a exceção e fazer o tratamento que você desejar.

Se você quiser que não apareceça mais essa mensagem do compilador, basta desmarcar a opção ali "Break when this exception type is thrown".

Oi Rafael, como vai?

A sugestão do Marcos foi excelente.

Um outro atalho que posso te sugerir, seria o Ctrl + F5, ele já irá trazer o trilha da exceção. Veja:

Imagem com a trilha de exceção exibida no console do Visual Studio 2019, com o código mencionado na primeira pergunta deste tópicoSe não conseguimos te auxiliar com o que espera, poderia trazer mais detalhes do que está acontecendo?

Abraços e bons estudos!

Aconteceu o mesmo comigo. A confusão foi porque quando tratei a exceção da divisão por zero, não apareceu mais a mensagem informando que o código tinha uma exceção. Já nessa da referência nula mesmo sendo tratada apareceu. Mas utilizei a dica da Ana e vi que tinha sido tratada. Obrigada!