Erros comuns de iteração
Modifique enquanto itera.
Erros comuns de iteração é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Armadilhas da iteração
Os laços são simples, mas alguns erros confundem iniciantes repetidamente.
Nesta lição, veremos os erros de iteração mais comuns e como evitá-los.
Modificando durante a iteração
O maior erro é alterar uma coleção enquanto você a percorre com foreach.
Adicionar ou remover itens durante a iteração lança uma InvalidOperationException em tempo de execução.
foreach (var n in list)
{
if (n < 0) list.Remove(n); // ERROR at runtime
}A solução segura
Para remover itens durante o laço, percorra uma cópia ou reúna os itens primeiro e remova-os depois.
Percorrer list.ToList() fornece um instantâneo separado para percorrer.
var list = new List<int> { 1, -2, 3, -4 };
foreach (var n in list.ToList())
{
if (n < 0) list.Remove(n);
}
Console.WriteLine(string.Join(",", list));Erro de um a mais nos laços for
Em um laço for manual, usar <= em vez de < acessa uma posição além do fim.
Os índices válidos vão de 0 a Length - 1, portanto a condição deve ser i < Length.
for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
Console.WriteLine(arr[i]);
}IndexOutOfRange
Esse erro de um a mais causa uma IndexOutOfRangeException.
foreach evita isso completamente, pois nunca usa um índice. Prefira-o quando precisar apenas ler os itens.
string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
Console.WriteLine(arr[i]);
}Esperando que foreach altere os itens
Atribuir um valor à variável do laço não altera a coleção e, no caso de tipos de valor, ela é apenas uma cópia.
Para atualizar itens, utilize um laço for com indexação.
int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));Coleção nula
Chamar foreach em uma referência null lança uma NullReferenceException.
Uma coleção vazia não é um problema, mas null é. Verifique ou inicialize a coleção antes de percorrê-la.
List<int> data = null;
if (data != null)
{
foreach (var x in data) Console.WriteLine(x);
}Confusão com o escopo da variável
A variável do laço existe somente dentro do corpo do laço.
Tentar usá-la depois do laço causa um erro de compilação, pois ela fica fora do escopo quando o laço termina.
foreach (var n in nums)
{
Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope hereEsquecendo as chaves
Sem chaves, apenas a próxima instrução pertence ao laço.
Isso pode interromper a lógica silenciosamente. Sempre utilize chaves em corpos com várias linhas para manter a intenção clara.
foreach (var n in nums)
Console.WriteLine(n);
Console.WriteLine("runs once, not per item");Risco de infinitude em while
Ao contrário de foreach, um laço while pode ser executado para sempre se sua condição nunca se tornar falsa.
Sempre certifique-se de que algo dentro do laço avance em direção à condição de saída.
int i = 0;
while (i < 3)
{
Console.WriteLine(i);
i++; // forgetting this would loop forever
}Escolhendo o laço certo
Ler todos os itens, sem precisar de índice → foreach.
Precisar do índice ou ter de modificar no local → for. Repetir até que uma condição mude → while.
Verificação rápida
Teste o que você aprendeu sobre erros de iteração.
Recapitulação
Você aprendeu a evitar modificar uma coleção durante foreach, erros de um a mais com <=, coleções nulas e confusão com escopo.
Escolha foreach para ler, for para modificar por índice e while para laços baseados em condições com uma saída clara.
Perguntas Frequentes
A aula “Erros comuns de iteração” é grátis?
Sim — o texto completo de “Erros comuns de iteração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Erros comuns de iteração”?
Modifique enquanto itera. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Erros comuns de iteração”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O laço foreach
- Iterando coleções
- break e continue
- Erros comuns de iteração