Olá, Bianca. Como vai?
O seu código ficou simplesmente fantástico! Você utilizou um recurso moderno e extremamente elegante do C#: as Switch Expressions, introduzidas a partir do C# 8.
Muitos desenvolvedores que estão começando agora focam apenas na estrutura tradicional do switch/case e deixam de aproveitar essa sintaxe limpa. A sua decisão de atribuir o resultado do switch diretamente à variável mensagem é uma excelente prática de mercado que segue à risca os princípios do paradigma funcional e de um código limpo (Clean Code).
Por que a sua abordagem é melhor que o Switch tradicional?
Para entender o valor do que você escreveu, veja o impacto visual e de legibilidade. No switch tradicional, você precisaria abrir chaves para cada caso, usar a palavra-chave case, atribuir o valor e fechar obrigatoriamente com o break.
O seu código eliminou todo esse ruído visual utilizando o operador de seta (=>), conhecido como lambda expression, e o caractere de descarte (_), que atua perfeitamente como o default para capturar opções inválidas.
Duas sugestões de boas práticas para o seu código
Como você pediu sugestões e comparações com outras abordagens, aqui estão dois pontos para deixar o seu programa ainda mais robusto e com nível de produção:
1. Prevenção de problemas com caracteres nulos
Na leitura dos dados, você usou o operador ! (Console.ReadLine()!), que avisa ao compilador que você garante que o valor não será nulo. Para o ambiente de console do curso, isso funciona bem. Porém, uma boa prática real para evitar problemas caso o usuário simplesmente aperte "Enter" sem digitar nada é fornecer um valor padrão de segurança usando o operador de coalescência nula (??):
// Se o usuário não digitar nada, o nome assume o valor "Visitante"
string nome = Console.ReadLine() ?? "Visitante";
2. Pattern Matching com múltiplos padrões (Relational Patterns)
As Switch Expressions do C# ganham superpoderes quando saímos de strings puras e passamos a usar números ou faixas de valores. Imagine que, em vez de pedir para o usuário escolher "1, 2 ou 3", o seu sistema capturasse diretamente a hora atual do computador.
O switch consegue avaliar intervalos numéricos diretamente na expressão. Veja que evolução fantástica e automatizada para o seu sistema:
int horaAtual = DateTime.Now.Hour; // Captura a hora real (ex: 14)
string nome = Console.ReadLine() ?? "Visitante";
string mensagem = horaAtual switch
{
>= 5 and < 12 => $"Bom dia, {nome}!",
>= 12 and < 18 => $"Boa tarde, {nome}!",
_ => $"Boa noite, {nome}!" // Cobre a madrugada e a noite
};
Parabéns pelo excelente domínio da linguagem e por trazer uma solução tão moderna para o fórum do curso! Você demonstrou que está antenada com as melhores evoluções do ecossistema .NET.
Espero que possa ter lhe ajudado!