3
respostas

Não capta o ExecptionNullReference

Não está pegando o execption com meu código.

using _07_ByteBank;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _07_Execptions
{
    class Program
    {
        static void Main(string[] args)
        {

            try
            {
                Metodo();
            }
            catch (DivideByZeroException erro)
            {
                Console.Write("Não é possível dividir por zero.");
            }
            catch (Exception erro)
            {
                Console.WriteLine(erro.Message);//mostra mensagem do erro 
                Console.WriteLine(erro.StackTrace);//mostra o caminho do erro
                Console.Write("Aconteceu um erro!");
            }

            Console.ReadLine();
        }
        private static void Metodo()
        {
            TestaDivisao(0);
        }

        private static void TestaDivisao(int valorDivisor)
        {

                int resultado = Dividir(10, valorDivisor);
                Console.WriteLine("O valor de 10 por " + valorDivisor + " é igual a " + resultado);

        }

        private static int Dividir(int numero, int divisor)
        {
            ContaCorrente conta = null;//para fazer o teste de nullReference
            Console.WriteLine(conta.Saldo);//para fazer o teste de nullReference

            return numero / divisor;
        }

    }

}

Depois tentei usar o código da aula mas também está dando o mesmo erro de não encontrar o execptionNull

        static void Main(string[] args)
        {
                try
            {
                Metodo();
            }
        catch (DivideByZeroException erro)
        {
                Console.WriteLine("Não é possível divisão por zero.");
        }
        catch (Exceptiopn erro)
        {
                Console.WriteLine(erro.Message);
                Console.WriteLine(erro.StackTrace);
                Console.WriteLine("Aconteceu um erro!);
        }

            Console.ReadLine();
        }

        // Teste com a cadeia de chamada:
        // Metodo -> TestaDivisao -> Dividir

        private static void Metodo()
        {
            TestaDivisao(0);
        }

        private static void TestaDivisao(int divisor)
        {
                int resultado = Dividir(10, divisor);
                Console.WriteLine("Resultado da divisão de 10 por " + divisor + " é " + resultado);
        }

        private static int Dividir(int numero, int divisor)
        {
            ContaCorrente conta = null;
            //Console.WriteLine(conta.Saldo);

            return numero / divisor;
        }
3 respostas

Olá José, fiz um teste e funcionou. Caso queira um específico crie um NullReferenceException

catch (DivideByZeroException erro)
 {
     Console.Write("Não é possível dividir por zero.");
 }
catch(NullReferenceException ex)
{
    Console.WriteLine("Objeto não referenciado: \n"+ex.Message);
 }
catch (Exception erro)
{
    Console.WriteLine(erro.Message);//mostra mensagem do erro
    Console.WriteLine(erro.StackTrace);//mostra o caminho do erro
    Console.Write("Aconteceu um erro!");
}

Você não esta conseguindo capturar ou seu código nem esta rodando devido a classe e o método main estar sem a declaração public?

Tentei com seu código e também deu erro. Está aparecendo:

System.NullReferenceException: 'Referência de objeto não definida para uma instância de um objeto.'

conta era null.

Na verdade ele dá essa mensagem e para onde esta null, porém se você apertar F5 ele cai no exception de início. Sempre que você estiver debugando ele tem esse comportamento, se você rodar o sistema sem debugar vai ver que cai direto na exception que você criou. Faz um teste e me avisa.

Abraço

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