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
IdadeInvalidaExceptiondeve herdar deException. - O método
ValidarIdadedeve lançarIdadeInvalidaExceptionpara idades fora do intervalo [0, 150]. - O
Maindeve 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
- Definimos
IdadeInvalidaExceptionherdando deException. O construtor recebe a idade e monta a mensagem, repassando parabase. - O método
ValidarIdadeverifica se a idade está fora do intervalo permitido. - Se inválida, lança
throw new IdadeInvalidaException(idade). - No
Main, chamamosValidarIdade(200)dentro de umtry. - O
catchcaptura especificamenteIdadeInvalidaExceptione 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) { }deixaMessagevazia. - Lançar
Exceptiongené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; é precisothrow 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.