在 Visual Basic 中有 For 和 For Each 循环,每种循环适用于特定任务。
VB6 和经典 Visual Basic 只支持范围循环(For ... Next)。在后来的版本中(从 VB6 和 VB.NET 开始),出现了 For Each,可以优雅地遍历集合和数组的元素。
主要问题是错误选择循环类型并尝试在 For Each 中修改集合,这会导致运行时错误。
当需要:
当需要:
代码示例:
' 带修改的元素遍历 Dim arr() As Integer = {1, 2, 3} For i As Integer = 0 To arr.Length - 1 arr(i) = arr(i) * 2 Next ' 仅读取集合 Dim list As New List(Of String) From {"one", "two", "three"} For Each s As String In list Console.WriteLine(s) Next
关键特点:
可以在 For Each 中修改 List(Of T) 吗?
不可以。这会导致 InvalidOperationException,因为在迭代过程中集合的结构不应改变。
如何提前退出 For Each 循环?
当找到所需元素时,使用 Exit For 语句。
For Each s In list If s = "two" Then Exit For End If Next
For 和 For Each 在数组上的速度差异是什么?
通常差别很小,但 For 可能会稍快一些(尤其是对于原始类型数组),因为它直接与索引一起工作,而 For Each 创建了额外的枚举器对象。
负面案例
开发人员尝试在 For Each 中从 List(Of T) 中删除元素。运行时收到 InvalidOperationException 错误。
优点:
缺点:
积极案例
为删除元素,从后向前遍历,使用普通的 For:
For i = list.Count - 1 To 0 Step -1 If list(i) = "two" Then list.RemoveAt(i) End If Next
优点:
缺点: