1
resposta

[Projeto] Buscando em uma lista

List<string> listaDeAlunos = new List<string> { "Ana", "Carlos", "Bianca", "João", "Marina" };
string nomeDoAluno;

Console.WriteLine("Digite o nome do aluno:");

// para validar a string
while (true)
{
    nomeDoAluno = Console.ReadLine()!;

    if (string.IsNullOrWhiteSpace(nomeDoAluno))
    {
        Console.WriteLine("Informação inválida, tente novamente:");
    }
    else
    {
        break;
    }
}

// iterando a List com While
byte i = 0;

while (i < listaDeAlunos.Count)
{
    if (nomeDoAluno == listaDeAlunos[i])
    {
        Console.WriteLine($"\nAluno(a) encontrado na posição: {i + 1}");
        break;
    }

    i++;

    if (i == listaDeAlunos.Count)
    {
        Console.WriteLine("\nAluno não está presente na lista");
    }
}
1 resposta

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!