0

这是一个很好的视频,解释了它是什么以及它们之间的区别,但它似乎有一个根本性的缺陷,你不能跳过这个列表;它甚至缺少 Previous() 方法。

如果找到匹配项,我将列表发送到函数,而不是原始的 for...next 从下一个索引开始,我只是返回在函数中找到下一个匹配项的行,因为它有已经完成了一个辅助循环来读取每个“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

4 回答 4

2

你不能跳过列表

你说这是一个缺陷。这不是当您不想允许跳过列表时。

人们对列表所做的第一件事就是迭代它们——这是所有类型集合的最低公分母。

如果您确实需要跳过,如您的示例所示,请不要使用IEnumerator.

于 2012-11-26T16:25:13.707 回答
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)

于 2012-11-26T16:30:42.470 回答
0

接口(和伴随的IEnumerable接口)的目的是提供一种只进的机制来迭代一个集合(或类似的结构)。鉴于此,我认为说它有“根本缺陷”并不公平,因为你不能跳过或倒车,就像说紧凑型汽车有根本缺陷是公平的,因为你可以' t 用它来运输大型农场动物。

或者,对于那些可能不喜欢汽车类比的人来说,这类似于说香蕉有一个根本缺陷,因为它(在普通的、未冷冻的状态下)不能用来敲钉子。

于 2012-11-26T16:26:33.677 回答
0

枚举的定义就是一一提及。枚举是从顶部开始并查看列表中的每个项目。这就是枚举。因此,可枚举的东西将是您可以从顶部一一查看的东西。IEnumerable 这个名字非常合适。

于 2012-11-26T16:28:41.107 回答