IEnumerator有什么意义?

时间:2012-11-26 16:22:02

标签: .net for-loop ienumerator

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

4 个答案:

答案 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)