如何:为集合或数组中的每个元素运行多个语句

更新:2007 年 11 月

For Each 语句结构类似于 For...Next 循环,但它为集合中的每个元素运行语句块,而不是运行指定的次数。For Each...Next 循环使用 “元素变量” 在每次重复循环时表示集合的不同元素。

重复集合的语句块

为集合中的每个元素运行一组语句。

  1. 标识要对其运行语句块的集合,并使用 For Each...Next 语句 (Visual Basic) 同时指定元素变量与集合。

    For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
    

    如果未在循环外声明元素变量,可以使用 As 子句(作为 For Each 语句的一部分)声明该变量。

    Visual Basic 对每个迭代自动替代集合的不同元素。

  2. 用跟在最后一个要重复的语句之后的 Next 语句来完成 For Each...Next 结构。可以在 Next 语句中指定元素变量。

    Sub lightBlueBackground(ByVal thisForm As System.Windows.Forms.Form)
        For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
            thisControl.BackColor = System.Drawing.Color.LightBlue
        Next thisControl 
    End Sub
    

    可以读取集合的元素,但是不能对集合本身做任何修改,例如添加、删除或替换任何元素。但是,如果元素是引用类型,则可以访问并设置其成员。由于每个 Control 元素都是引用类型,因此前一示例中的代码可以更改其 BackColor 属性。

重复数组的语句块

还可以用 For Each...Next 循环来循环访问数组。但是,与集合一样,只能读取数组元素,而不能更改它们。

为数组中的每个元素运行一组语句

  1. 使用 For Each 语句同时指定元素变量和数组。不要在数组名后面加上圆括号。

    Visual Basic 像处理集合那样处理数组。

  2. 在语句块后面加上 Next 语句。可以在 Next 语句中指定元素变量。

    以下过程用于计算数组中各个元素的和,并将每个元素重置为零:

    Function sumAndReset(ByRef numbers() As Integer) As Integer
        Dim sum As Integer = 0
        For Each elt As Integer In numbers 
            sum += elt
            ' The following statement works only on the local copy
            ' of the array, not on the original array.
            elt = 0
        Next elt
        Return sum
    End Function
    

    求和计算可以正常完成,因为它只需要读取各个元素。但是,将元素重置为零的操作无法完成,因为只有每个元素的本地副本被重置为零,而原始数组中的原始元素却保留未变。

请参见

任务

如何:将控制转移到控制结构外

如何:重复运行多条语句

如何:提高循环的性能

如何:跳转到循环的下一次迭代

概念

决策结构

循环结构

其他控制结构

嵌套的控制结构

参考

For...Next 语句 (Visual Basic)

其他资源

控制流 (Visual Basic)