vb.net:“for each”中的索引号

时间:2010-02-25 02:17:22

标签: vb.net collections

在VB.net的某个时候我有类似的东西:

For Each El in Collection
   Write(El)
Next

但如果我需要索引编号,我必须将其更改为

For I = 0 To Collection.Count() - 1
   Write(I & " = " & Collection(I))
Next

甚至(更糟)

I = 0
For Each El In Collection
   Write(I & " = " & El)
   I += 1
Next

是否有另一种获取索引的方法?

3 个答案:

答案 0 :(得分:22)

如果您使用的是通用集合(Collection(of T)),那么您可以使用IndexOf method

For Each El in Collection
   Write(Collection.IndexOf(El) & " = " & El)
Next

答案 1 :(得分:9)

我相信你用计数器变量做这种方式的最初方式是最有效的方法。使用Linq或IndexOf会破坏性能。

Dim i as Integer = 0
For Each obj In myList
    'Do stuff
    i+=1
Next

答案 2 :(得分:4)

如果你需要索引,那么for循环是最直接的选择并且具有很好的性能。除了你提到的替代方法,你可以使用重载的Select方法来跟踪索引并继续使用foreach循环。

Dim list = Enumerable.Range(1, 10).Reverse() ''# sample list
Dim query = list.Select(Function(item, index) _
                           New With { .Index = index, .Item = item })
For Each obj In query
    Console.WriteLine("Index: {0} -- Item: {1}", obj.Index, obj.Item)
Next

但是,如果唯一的原因是遍历它并知道索引,我会坚持使用for循环。上面没有说清楚为什么你选择跳过for循环。