Olá, Eduardo. Como vai?
Excelente aplicação do LINQ! Você utilizou o método de extensão .Where() com uma expressão lambda de forma muito precisa para filtrar os dados da lista. Esse é o tipo de operação que torna o C# uma linguagem extremamente poderosa para manipular coleções de dados de maneira declarativa e legível.
Assim como nos desafios anteriores, para garantir que seu código seja "à prova de falhas", vale a pena aplicar algumas validações, especialmente na entrada do usuário e no tratamento da lista filtrada. Se nenhum aluno for encontrado com a idade informada, o foreach simplesmente não executará nada, e o usuário pode ficar sem saber se o programa funcionou ou se ocorreu um erro.
Aqui estão algumas sugestões para complementar sua implementação:
- Use o
int.TryParse para evitar que o programa trave caso o usuário digite algo que não seja um número. - Verifique se a lista resultante do filtro contém elementos antes de exibir os dados.
- Adicione o
using System.Linq; (embora em versões recentes do .NET ele costume ser implícito, é bom conferir).
Veja como o seu código pode ser refinado:
string fileName = "pessoas.json";
if (File.Exists(fileName))
{
string jsonString = File.ReadAllText(fileName);
var pessoas = JsonSerializer.Deserialize<List<Pessoa>>(jsonString);
if (pessoas != null)
{
Console.Write("Digite a idade para buscar pessoas: ");
if (int.TryParse(Console.ReadLine(), out int idadeParaBuscar))
{
// Usando LINQ para filtrar
var pessoasComIdade = pessoas.Where(x => x.Idade == idadeParaBuscar).ToList();
if (pessoasComIdade.Any())
{
Console.WriteLine($"\nForam encontradas {pessoasComIdade.Count} pessoas com {idadeParaBuscar} anos:");
foreach (var pessoa in pessoasComIdade)
{
Console.WriteLine($"- {pessoa.Nome} ({pessoa.Email})");
}
}
else
{
Console.WriteLine($"Nenhuma pessoa encontrada com a idade {idadeParaBuscar}.");
}
}
else
{
Console.WriteLine("Por favor, digite um número de idade válido.");
}
}
}
else
{
Console.WriteLine($"O arquivo {fileName} não existe.");
}
- O método .Any() é a forma mais eficiente de verificar se o filtro retornou algum resultado.
- Ao usar .ToList() após o .Where(), você materializa a consulta, o que é útil se precisar acessar o
.Count da lista filtrada. - A validação do int.TryParse garante que seu programa não "exploda" caso alguém digite um texto no campo de idade.
Parabéns por chegar até aqui e dominar o uso do LINQ com arquivos JSON!
Espero que possa ter lhe ajudado!