This is an excellent video解释它是什么和差异,但它似乎有一个根本的缺陷,你不能跳过列表;它甚至缺少Previous()方法。
我发送了一个匹配的函数,如果它找到了一个匹配的函数,而不是原来的......接下来从下一个索引开始,我刚刚返回了函数中找到下一个匹配的行,因为它已经完成了一个二级循环来读取每个'Hello'块之间的所有行。
我无法使用像IEnumerator这样的迭代类来执行此操作;我错过了什么吗?
For row As Integer = 0 To dataList.Count - 1
If row <> -1 Then
If dataList.Item(row) = "Hello" Then row = SayHello(row)
End If
Next
答案 0 :(得分:2)
你不能跳过列表
你说这是一个缺陷。当你不想允许跳过列表时,不是这样。
人们对列表做的第一件事是对它们进行迭代 - 这是所有类型集合的最小公分母。
如果您确实需要跳过,例如,请不要使用IEnumerator
。
答案 1 :(得分:0)
接口(以及附带的IEnumerable
接口)的目的是提供一种仅向前机制,用于迭代集合(或类似结构)。考虑到这一点,我认为它有一个“根本性的缺陷”是不公平的,因为你不能跳过或反过来,因为可以说紧凑型汽车有一个根本的缺陷,因为你可以'用它来运输大型农场动物。
或者,对于那些可能不喜欢汽车类比的人来说,它类似于说香蕉有一个根本的缺陷,因为它(在一个普通的,未解冻的状态下)不能用来钉指甲。
答案 2 :(得分:0)
枚举的定义是逐一提及。要枚举的是从顶部开始并查看列表中的每个项目。这就是枚举的内容。因此,可以枚举的东西可以从顶部逐个查看。名称IEnumerable非常合适。
答案 3 :(得分:0)
IEnumerator的目的是一次只提供一个对象,这意味着您可以节省内存和/或时间。要使用列表,您需要先填写列表。即使您并不真正需要完整列表,但在每次迭代时始终使用单个项目。
Private Iterator Function AllIntegers() As IEnumerable(Of Integer)
Dim i = Integer.MinValue
While i < Integer.MaxValue
Yield i
End While
End Function
现在你可以做到
For each i in AllIntegers
现在尝试将所有这些整数放入List(Of Integer)