Olá, José. Como vai?
O seu código em C# ficou muito bom e demonstra uma excelente linha de raciocínio. Você utilizou muito bem a estrutura while (true) combinado com string.IsNullOrWhiteSpace para garantir que o usuário não envie uma entrada vazia ou cheia de espaços, o que é uma excelente prática de validação de dados.
Analisando a segunda parte do seu código, onde você realiza a busca na lista, a lógica funciona corretamente. Porém, podemos fazer uma pequena otimização para tornar o código mais limpo e evitar que a verificação if (i == listaDeAlunos.Count) seja executada desnecessariamente a cada iteração do laço.
No desenvolvimento de software, quando fazemos uma busca, é uma boa prática utilizar uma variável de controle (geralmente um tipo booleano) para indicar se encontramos o que estávamos procurando. Assim, a mensagem de "não encontrado" pode ser exibida fora do laço, apenas se a busca falhar por completo.
Veja como podemos reestruturar essa segunda parte para deixar o fluxo mais limpo:
// iterando a List com While
byte i = 0;
bool alunoEncontrado = false;
while (i < listaDeAlunos.Count)
{
// Usando StringComparison para ignorar diferenças entre maiúsculas e minúsculas
if (string.Equals(nomeDoAluno, listaDeAlunos[i], StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine($"\nAluno(a) encontrado na posição: {i + 1}");
alunoEncontrado = true;
break; // Interrompe o laço pois já achou o aluno
}
i++;
}
// A verificação de não encontrado fica isolada e limpa fora do loop
if (!alunoEncontrado)
{
Console.WriteLine("\nAluno não está presente na lista");
}
Além de mover o fluxo de "não encontrado" para fora do laço, adicionei uma sugestão extra: o uso do string.Equals com StringComparison.OrdinalIgnoreCase. Na prática, se o usuário digitar "ana" (com "a" minúsculo), o operador == diria que não é igual a "Ana". Com essa modificação, seu sistema de busca fica mais inteligente e imune a esse tipo de detalhe de digitação!
Parabéns pela estrutura e pelo empenho nos estudos de C#!
Espero que possa ter lhe ajudado!