Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Throw causando encerramento do programa.

Bom dia! Estou tentando aplicar os conceitos da aula em outro código, mas o resultado não está sendo o mesmo.

  • O que eu esperava acontecer: programa exibe mensagem de erro ao tentar dividir por 0 e depois imprime "Hello!".
  • O que acontece de fato: programa exibe mensagem de erro, MAS o programa encerra com a seguinte mensagem na imagem 1, e não exibe o "Hello!". O throw não serve para encerrar a execução da função caso ela traga erros? Não entendo por que se comporta assim.

IMAGEM 1: Exception Unhandled

CÓDIGO FONTE:

using System;

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

            Console.WriteLine(dev(5, 0));
            Console.WriteLine("Hello!");
            Console.ReadLine();

        }

        static public int dev(int a, int b)
        {
            try
            {
                return a / b;
            }
            catch(DivideByZeroException erro)
            {
                Console.WriteLine(erro.Message);
                throw;
            }
        }

    }
}
2 respostas
solução!

Olá Grabriel, tudo bom?

Então camarada, repare bem, quando você usa a palavra reservada "throw" você está lançando, passando para frente a exceção que ocorreu, neste caso ao executar o método "dev", que pode gerar a exceção, a tratativa (try...catch) fica no código que invocou o método. Repare no mínuto 6:02 do vídeo do professor intitulado "Palavra reservada throw".

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

            try
            {
                Console.WriteLine(dev(5, 0));  // envolvendo a invocação do método no try...catch
            }
            catch (Exception)
            {

                Console.WriteLine("Divisão por zero.");
            }

            Console.WriteLine("Hello!");
            Console.ReadLine();

        }

        static public int dev(int a, int b)
        {
            try
            {
                return a / b;
            }
            catch (DivideByZeroException erro)
            {
                Console.WriteLine(erro.Message);
                throw;
            }
        }

    }

Fiz um pequeno ajuste no seu código, envolvendo a invocação(chamada) do método que vai gerar a exceção em um try...catch. Blz? Espero ter ajudado, qualquer dúvida, nos chame aqui no fórum.

Bons estudos, espero ter ajudado.

Muito obrigado!!! Ótima explicação.