Olá, José. Como vai?
Parabéns pela excelente implementação do projeto! É muito gratificante ver como você utilizou recursos modernos da linguagem C#, como o Switch Expression (introduzido no C# 8.0), para tornar seu código muito mais conciso e legível.
Gostaria de destacar alguns pontos técnicos de alto nível na sua solução:
- Validação de Dados: O uso de loops
while(true) com byte.TryParse é uma boa prática essencial. Isso evita que o programa sofra um crash caso o usuário digite uma letra onde se espera um número, garantindo a resiliência do software. - Switch Expression: A sua função
MensagemDeSaudacao ficou extremamente limpa. Ao contrário do switch tradicional, a expressão que você usou é perfeita para atribuições diretas, reduzindo o excesso de código (boilerplate). - Tratamento de Exceções: Ao utilizar o
_ => throw new InvalidOperationException(), você seguiu o princípio de "falhar rápido" (fail-fast), o que ajuda muito na identificação de bugs durante o desenvolvimento.
Para agregar ainda mais valor ao seu aprendizado, deixo aqui uma pequena sugestão de refatoração para a sua validação numérica. No trecho "123".Contains(entrada), você está comparando strings. Uma alternativa mais tipada e robusta seria verificar o valor numérico diretamente:
// Uma forma alternativa e comum em C#:
if (byte.TryParse(entrada, out byte dadoValido) && (dadoValido >= 1 && dadoValido <= 3))
{
return dadoValido;
}
Além disso, notei que você utilizou o operador ! (null-forgiving) em Console.ReadLine()!. Isso mostra que você já está atento aos Nullable Reference Types, uma funcionalidade importante para evitar o famoso erro de referência nula.
Seu projeto demonstra uma ótima base lógica e um bom entendimento da sintaxe da linguagem. Continue praticando essa organização de funções, pois ela é a base para criar sistemas complexos e de fácil manutenção!
Espero que possa ter lhe ajudado!