-
如何:为集合或数组中的每个元素运行多个语句 (Visual Basic)
For Each 语句结构类似于 For...Next 循环,但它为集合中的每个元素运行语句块,而不是运行指定的次数。 For Each...Next 循环使用 “元素变量” 在每次重复循环时表示集合的不同元素。
重复集合的语句块
为集合中的每个元素运行一组语句。
-
标识要对其运行语句块的集合,并使用 For Each...Next 语句 (Visual Basic) 同时指定元素变量与集合。
For Each thisControl As System.Windows.Forms.Control In thisForm.Controls
如果未在循环外声明元素变量,可以使用 As 子句(作为 For Each 语句的一部分)声明该变量。
Visual Basic 对每个迭代自动替代集合的不同元素。
-
用跟在最后一个要重复的语句之后的 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 循环来循环访问数组。 但是,与集合一样,只能读取数组元素,而不能更改它们。
为数组中的每个元素运行一组语句
-
使用 For Each 语句同时指定元素变量和数组。 数组名后不要跟括号。
Visual Basic 像处理集合那样处理数组。
-
在语句块后面加上 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
求和计算可以正常完成,因为它只需要读取各个元素。 但是,将元素重置为零的操作无法完成,因为只有每个元素的本地副本被重置为零,而原始数组中的原始元素却保留未变。
原文链接:https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/ms172860(v=vs.100)