Médio C#

Exceção personalizada para idade inválida

Enunciado

Crie uma exceção personalizada IdadeInvalidaException que herde de Exception. Escreva um método ValidarIdade(int idade) que lance essa exceção se a idade for menor que 0 ou maior que 150. No Main, chame o método dentro de um try e capture a exceção, exibindo a mensagem.

Requisitos

  • A classe IdadeInvalidaException deve herdar de Exception.
  • O método ValidarIdade deve lançar IdadeInvalidaException para idades fora do intervalo [0, 150].
  • O Main deve capturar a exceção e imprimir a mensagem de erro.

Código inicial

using System;

// TODO: criar IdadeInvalidaException

class Program
{
    static void ValidarIdade(int idade)
    {
        // TODO: lançar exceção se inválida
    }

    static void Main()
    {
        try
        {
            ValidarIdade(200);
        }
        catch (IdadeInvalidaException ex)
        {
            Console.WriteLine($"Erro: {ex.Message}");
        }
    }
}

Saída esperada

Erro: Idade 200 é inválida. Deve estar entre 0 e 150.
Ver dica

No construtor da exceção, passe a mensagem para base(...).

Mostrar solução
using System;

public class IdadeInvalidaException : Exception
{
    public IdadeInvalidaException(int idade)
        : base($"Idade {idade} é inválida. Deve estar entre 0 e 150.")
    {
    }
}

class Program
{
    static void ValidarIdade(int idade)
    {
        if (idade < 0 || idade > 150)
            throw new IdadeInvalidaException(idade);
        Console.WriteLine("Idade válida.");
    }

    static void Main()
    {
        try
        {
            ValidarIdade(200);
        }
        catch (IdadeInvalidaException ex)
        {
            Console.WriteLine($"Erro: {ex.Message}");
        }
    }
}

Passo a passo

  1. Definimos IdadeInvalidaException herdando de Exception. O construtor recebe a idade e monta a mensagem, repassando para base.
  2. O método ValidarIdade verifica se a idade está fora do intervalo permitido.
  3. Se inválida, lança throw new IdadeInvalidaException(idade).
  4. No Main, chamamos ValidarIdade(200) dentro de um try.
  5. O catch captura especificamente IdadeInvalidaException e imprime a mensagem.

Por que funciona

A exceção personalizada comunica claramente o problema de domínio. O throw interrompe o fluxo normal e propaga o erro até um catch compatível. Como a exceção herda de Exception, ela pode ser capturada por tipos mais genéricos, mas aqui usamos o tipo específico.

Erros comuns

  • Não chamar base(...): a mensagem não será definida corretamente. Exemplo: public IdadeInvalidaException(int idade) { } deixa Message vazia.
  • Lançar Exception genérica: throw new Exception("Idade inválida") dificulta o tratamento específico.
  • Esquecer o throw: apenas criar a exceção não a lança; é preciso throw new ....

Outra forma de resolver

Usar ArgumentOutOfRangeException em vez de uma exceção personalizada. É preferível quando o erro é genérico e não precisa de dados adicionais.

Saída esperada

Erro: Idade 200 é inválida. Deve estar entre 0 e 150.