首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

绝对新手,新手上路。请教.NEt里面是不是有个ForEach能帮具体的解释下吗?帮顶又分,

2012-04-10 
绝对新手,新手上路。请问.NEt里面是不是有个ForEach能帮具体的解释下吗?帮顶又分,在线等!等您的解释[解决办

绝对新手,新手上路。请问.NEt里面是不是有个ForEach能帮具体的解释下吗?帮顶又分,在线等!
等您的解释

[解决办法]
C#提供一个for循环的捷径,而且它还促进了集合类更为一致:

在Java或C++中:

1. while (! collection.isEmpty())

{

Object o = collection.get();

collection.next()

//...

2. for (int i = 0; i < array.length; i++)

//...

在 C#中:

1. foreach (object o in collection)

//...

2. foreach (int i in array)

//...

C#的for循环将工作于集合对象上(数组实现一个集合)。集合对象有一个GetEnumerator()方法,该方法返回一个Enumerator对象。Enumerator对象有一个MoveNext()方法和一个Current属性。

[解决办法]
遍历集合中的项目
[解决办法]
MSDN上有啊,自己找找看

Visual Basic 语言概念

For Each...Next 语句
For Each...Next 循环类似于 For...Next 循环,但它为集合中的每个元素执行语句块,而不是执行指定次数。语法如下所示:

For Each elementvariable [ As datatype ] In collection
' Statement block to be executed for each value of elementvariable.
Next [ elementvariable ]
collection 的元素可以是任何数据类型。elementvariable 的数据类型必须是集合的每个元素都可以转换为的数据类型。

如果未在循环外声明 elementvariable,可以在 For Each 语句中使用 As 子句声明该变量。

对于循环的每次迭代,Visual Basic 将变量 elementvariable 设置为集合中的元素之一,然后执行语句块。当为集合中的所有元素都分配给 elementvariable 后,For Each 循环终止,控制传递给 Next 语句后面的语句。

可以选择在 Next 语句中指定元素变量。这提高了程序的可读性。必须指定与出现在 For Each 语句中的变量相同的变量。

下面的过程接受窗体,并将该窗体中每个控件的背景色设置为浅蓝色:

Sub LightBlueBackground(ByVal ThisForm As System.Windows.Forms.Form)
Dim ThisControl As System.Windows.Forms.Control
For Each ThisControl In ThisForm.Controls
ThisControl.BackColor = System.Drawing.Color.LightBlue
Next ThisControl
End Sub
该集合必须是实现 System.Collections 命名空间的 IEnumerable 接口的对象。IEnumerable 定义 GetEnumerator 方法,该方法返回集合的枚举数对象。该枚举数对象公开 Current 属性和 MoveNext 方法。Visual Basic 使用它们遍历集合。Current 返回的元素的数据类型必须可转换为 elementvariable 的数据类型。

修改元素
枚举数对象的 Current 属性是只读的,它返回每个集合元素的本地副本。这意味着不能在 For Each...Next 循环中修改元素本身。您所做的任何修改只会影响从 Current 返回的本地副本,而不会反映到集合中。但是,如果元素属于引用类型,则可以修改它所指向的实例的成员。这就是在上例中虽然不能修改 ThisControl 本身,但可以修改各个 ThisControl 元素的 BackColor 成员的原因。

访问数组
由于 System.Array 实现 IEnumerable 接口,因此所有数组都公开 GetEnumerator 方法。这意味着可以使用 For Each...Next 循环来循环访问数组。但是,只能读取数组元素,而不能进行更改。以下过程设计用于计算数组中各个元素的和,并将每个元素重置为零:

Function SumAndReset(ByRef A() As Integer) As Integer
Dim Elt As Integer
Dim Sum As Integer = 0
For Each Elt In A
Sum += Elt
Elt = 0
Next Elt
Return Sum
End Function
求和计算可以正常完成,因为它只需要读取各个元素。但却无法实现将元素重置为零的目的,因为只有本地副本被重置为零,而集合中的原始元素却未被更改。

更改集合
使用枚举数对象不能通过添加、删除、替换或重新排序任何元素来更改集合。如果在启动 For Each...Next 循环后更改了集合,枚举数对象将失效,并且下次尝试访问元素时将引发 InvalidOperationException。

遍历集合
执行 For Each...Next 循环时,在 GetEnumerator 方法返回的枚举数对象的控制下遍历集合。遍历的顺序不是由 Visual Basic 确定的,而是由枚举数对象的 MoveNext 方法决定的。这意味着可能无法预测 elementvariable 首先返回集合中的哪个元素,也无法预测在某个给定的元素后将返回的下一个元素是哪个元素。

如果代码依赖于以特定顺序遍历集合,则 For Each...Next 循环不是最佳选择,除非您知道该集合公开的枚举数对象的特征。使用其他循环(例如 For...Next 或 Do...Loop)也许可以获得更可靠的结果。

在 For Each...Next 循环完成集合前退出循环
可以使用 Exit For 语句在 For Each...Next 循环遍历集合前退出该循环。例如,如果检测到使继续迭代不必要或不可能的条件(如错误值或终止请求),则可能需要退出循环。而且,如果在 Try...Catch...Finally 中捕获异常,则可以在 Finally 块的结尾使用 Exit For。


[解决办法]
遍历集合
执行 For Each...Next 循环时,在 GetEnumerator 方法返回的枚举数对象的控制下遍历集合。遍历的顺序不是由 Visual Basic 确定的,而是由枚举数对象的 MoveNext 方法决定的。这意味着可能无法预测 elementvariable 首先返回集合中的哪个元素,也无法预测在某个给定的元素后将返回的下一个元素是哪个元素。
------解决方案--------------------


遍历集合

热点排行