Häufige Fehler bei der Iteration
Während der Iteration verändern.
Häufige Fehler bei der Iteration ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Stolperfallen bei Iterationen
Schleifen sind einfach, aber einige Fehler bereiten Anfängern immer wieder Schwierigkeiten.
In dieser Lektion sehen wir uns die häufigsten Fehler beim Iterieren an und erfahren, wie Sie sie vermeiden.
Ändern während der Iteration
Der größte Fehler: eine Sammlung zu ändern, während Sie sie mit foreach durchlaufen.
Wenn Sie während der Iteration Elemente hinzufügen oder entfernen, wird zur Laufzeit eine InvalidOperationException ausgelöst.
foreach (var n in list)
{
if (n < 0) list.Remove(n); // ERROR at runtime
}Die sichere Lösung
Wenn Sie während einer Schleife Elemente entfernen möchten, durchlaufen Sie eine Kopie oder sammeln Sie die zu entfernenden Elemente zunächst und entfernen Sie sie anschließend.
Wenn Sie über list.ToList() iterieren, erhalten Sie einen separaten Schnappschuss, den Sie durchlaufen können.
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));Off-by-one-Fehler in for-Schleifen
Bei einer manuellen for-Schleife führt die Verwendung von <= statt < dazu, dass über das Ende hinaus gelesen wird.
Gültige Indizes reichen von 0 bis Length - 1. Daher sollte die Bedingung i < Length lauten.
for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
Console.WriteLine(arr[i]);
}IndexOutOfRange
Dieser Off-by-one-Fehler verursacht eine IndexOutOfRangeException.
foreach vermeidet dieses Problem vollständig, da dabei kein Index verwendet wird. Bevorzugen Sie es, wenn Sie Elemente nur lesen müssen.
string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
Console.WriteLine(arr[i]);
}Erwarten, dass foreach Elemente ändert
Eine Zuweisung an die Schleifenvariable ändert die Sammlung nicht. Bei Werttypen handelt es sich ohnehin nur um eine Kopie.
Um Elemente zu aktualisieren, verwenden Sie eine for-Schleife mit Indizierung.
int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));Null-Sammlung
Wenn Sie foreach auf einer null-Referenz aufrufen, wird eine NullReferenceException ausgelöst.
Eine leere Sammlung ist unproblematisch, null hingegen nicht. Prüfen oder initialisieren Sie die Sammlung, bevor Sie die Schleife ausführen.
List<int> data = null;
if (data != null)
{
foreach (var x in data) Console.WriteLine(x);
}Verwirrung beim Gültigkeitsbereich von Variablen
Die Schleifenvariable existiert nur innerhalb des Schleifenrumpfs.
Wenn Sie versuchen, sie nach der Schleife zu verwenden, tritt ein Kompilierungsfehler auf, da sie nach dem Ende der Schleife außerhalb ihres Gültigkeitsbereichs liegt.
foreach (var n in nums)
{
Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope hereGeschweifte Klammern vergessen
Ohne geschweifte Klammern gehört nur die jeweils nächste einzelne Anweisung zur Schleife.
Das kann die Logik unbemerkt beeinträchtigen. Verwenden Sie bei mehrzeiligen Rümpfen immer geschweifte Klammern, damit die Absicht klar erkennbar bleibt.
foreach (var n in nums)
Console.WriteLine(n);
Console.WriteLine("runs once, not per item");Endlosrisiko bei while
Anders als foreach kann eine while-Schleife für immer laufen, wenn ihre Bedingung nie falsch wird.
Stellen Sie immer sicher, dass sich innerhalb der Schleife etwas auf das Erreichen der Abbruchbedingung zubewegt.
int i = 0;
while (i < 3)
{
Console.WriteLine(i);
i++; // forgetting this would loop forever
}Die richtige Schleife auswählen
Jedes Element lesen, kein Index erforderlich → foreach.
Index erforderlich oder Elemente direkt ändern → for. Wiederholen, bis sich eine Bedingung ändert → while.
Kurzer Test
Testen Sie, was Sie über Fehler bei Iterationen gelernt haben.
Zusammenfassung
Sie haben gelernt, Änderungen an einer Sammlung während foreach, Off-by-one-Fehler mit <=, null-Sammlungen und Verwirrung beim Gültigkeitsbereich zu vermeiden.
Wählen Sie foreach zum Lesen, for zum Ändern über einen Index und while für bedingungsabhängige Schleifen mit einem klaren Abbruch.
Häufig gestellte Fragen
Ist die Lektion „Häufige Fehler bei der Iteration“ kostenlos?
Ja — der vollständige Text von „Häufige Fehler bei der Iteration“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Häufige Fehler bei der Iteration“?
Während der Iteration verändern. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Häufige Fehler bei der Iteration“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Die foreach-Schleife
- Collections durchlaufen
- break und continue
- Häufige Fehler bei der Iteration