Iteração sobre dicionário em C#: guia completo para iniciantes e profissionais

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Dicionários em C#: por que são importantes e como trabalhar com eles?



Imagine que você é um bibliotecário. Você tem milhares de livros e precisa encontrar um específico em segundos. Você iria percorrer todos os livros em ordem? Não, você usaria um catálogo. O dicionário (Dictionary) em C# é exatamente esse catálogo. Ele armazena pares "chave-valor" e permite obter dados instantaneamente pela chave.



Mas o que fazer quando você não precisa encontrar um único registro, mas sim processar todo o conteúdo do dicionário? Por exemplo, exibir todas as configurações do aplicativo, calcular o total de um carrinho de compras online ou serializar dados em JSON. É aí que surge a clássica pergunta: "How to iterate over a dictionary?".



No Stack Overflow, essa pergunta acumulou milhares de visualizações. E não é à toa: parece simples, não? Mas iniciantes frequentemente tropeçam nos tipos de dados, e profissionais, no desempenho. Neste artigo, vamos abordar todas as formas de iterar sobre um dicionário em C#: desde o simples foreach até o avançado LINQ. Vamos lá!



1. Base: estrutura do Dictionary em C#



Antes de iterar, vamos lembrar como é um dicionário C#. É uma coleção genérica do namespace System.Collections.Generic.



Dictionary<string, int> ages = new Dictionary<string, int>(){    { "Ana", 25 },    { "Bruno", 30 },    { "Carlos", 35 }};


Cada elemento do dicionário é uma estrutura KeyValuePair<TKey, TValue>. Ela tem duas propriedades: Key e Value. É com esse par que vamos trabalhar ao percorrer.



2. Clássico: foreach sobre o dicionário



A forma mais comum de iterar sobre um dicionário C# é o loop foreach. Ele é conciso, legível e seguro.



foreach (KeyValuePair<string, int> kvp in ages){    Console.WriteLine($"{kvp.Key}: {kvp.Value} anos");}


Saída:

Ana: 25 anosBruno: 30 anosCarlos: 35 anos


Observe: kvp é um KeyValuePair. Não tente modificar a chave ou o valor dentro do loop — o dicionário se tornará inconsistente e você receberá uma exceção InvalidOperationException.



Dica de profissional: Se tiver preguiça de escrever o tipo completo, use var:

foreach (var kvp in ages) { ... }


3. Apenas chaves ou apenas valores



Às vezes, não precisamos do par completo. Por exemplo, precisamos apenas listar todas as chaves (nomes) ou todos os valores (idades). Para isso, o dicionário tem as propriedades Keys e Values.



Iteração sobre chaves

foreach (string name in ages.Keys){    Console.WriteLine($"Nome: {name}");}


Iteração sobre valores

foreach (int age in ages.Values){    Console.WriteLine($"Idade: {age}");}


Isso é mais rápido do que obter KeyValuePair, se você não precisar da segunda parte. Além disso, o código fica mais limpo.



4. Acesso por índice: for e ElementAt



Muitos iniciantes tentam usar for (int i = 0; i < dict.Count; i++). Mas Dictionary em C# não suporta indexador por número! Tentar escrever dict[i] resultará em erro de compilação.



No entanto, é possível contornar: obter a coleção de pares com .ToList() e acessar pelo índice.



var list = ages.ToList();for (int i = 0; i < list.Count; i++){    Console.WriteLine($"{list[i].Key}: {list[i].Value}");}


Desvantagens:

  • Cria uma cópia adicional dos dados (memória + tempo).
  • Perde o sentido do dicionário como um array associativo.

Esse método só deve ser usado se você precisar vitalmente de um índice (por exemplo, para processamento paralelo com divisão em partes).



5.

Blogs

Book Recommendations