ProgrammierungVB.NET Entwickler

Wie werden For- und For Each-Schleifen in Visual Basic implementiert, wann sollte man welche Schleife wählen und welche Fehler treten häufig beim Arbeiten mit Sammlungen auf?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

In Visual Basic gibt es die Schleifen For und For Each, von denen jede für bestimmte Aufgaben geeignet ist.

Hintergrund der Frage

VB6 und klassisches Visual Basic unterstützten nur Schleifen über Bereiche (For ... Next). In späteren Versionen (beginnen mit VB6 und VB.NET) wurde For Each eingeführt, das es ermöglicht, Elemente von Sammlungen und Arrays elegant zu durchlaufen.

Problem

Das Hauptproblem ist die falsche Wahl des Schleifentyps und der Versuch, die Sammlung innerhalb von For Each zu ändern, was zu Laufzeitfehlern führt.

Lösung

Verwenden Sie die normale For-Schleife, wenn:

  • Sie einen Index des Elements benötigen
  • Sie Elemente des Arrays nach Index ändern müssen
  • Sie über einen Zahlenbereich iterieren müssen

Verwenden Sie For Each, wenn:

  • Nur der Wert jedes Elements wichtig ist
  • Die Struktur der Sammlung im Voraus nicht bekannt ist
  • Eleganz und Minimierung von Fehlern erforderlich sind

Beispielcode:

' Durchlaufen von Elementen mit Änderungen Dim arr() As Integer = {1, 2, 3} For i As Integer = 0 To arr.Length - 1 arr(i) = arr(i) * 2 Next ' Nur Lesen der Sammlung Dim list As New List(Of String) From {"one", "two", "three"} For Each s As String In list Console.WriteLine(s) Next

Wesentliche Merkmale:

  • For wird zur Arbeit mit Indizes verwendet
  • For Each erlaubt es nicht, die Sammlung innerhalb der Schleife zu ändern
  • For Each ist universell für jedes IEnumerable-Objekt

Fangfragen.

Kann man eine Sammlung List(Of T) innerhalb von For Each ändern?

Nein. Dies führt zu einer InvalidOperationException, da die Struktur der Sammlung während der Iteration nicht geändert werden darf.

Wie verlässt man For Each rechtzeitig?

Verwenden Sie die Exit For-Anweisung, wenn das gesuchte Element gefunden wurde.

For Each s In list If s = "two" Then Exit For End If Next

Wie unterscheiden sich die Geschwindigkeiten von For und For Each bei Arrays?

In der Regel ist der Unterschied minimal, aber For kann etwas schneller sein (insbesondere bei Arrays primitiver Typen), da es direkt mit Indizes arbeitet, während For Each ein zusätzliches Enumerator-Objekt erstellt.

Typische Fehler und Anti-Patterns

  • Die Sammlung während For Each ändern
  • Verwirrte Indizes bei der Verwendung von normaler For mit Arrays und Sammlungen
  • For Each verwenden, wenn der Index des Elements benötigt wird

Beispiel aus dem Leben

**Negativer Fall

Ein Entwickler versucht, Elemente aus List(Of T) innerhalb von For Each zu löschen. Er erhält zur Laufzeit einen Fehler vom Typ InvalidOperationException.

Vorteile:

  • Einfacher Lese-Code für die Sammlung

Nachteile:

  • Programm stürzt ab

**Positiver Fall

Um Elemente zu löschen, wird mit der normalen For-Schleife von hinten durchlaufen:

For i = list.Count - 1 To 0 Step -1 If list(i) = "two" Then list.RemoveAt(i) End If Next

Vorteile:

  • Keine Iterationsfehler, alle benötigten Elemente werden entfernt

Nachteile:

  • Erfordert mehr Code und Verständnis der Datenstruktur