在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
是否有另一种获取索引的方法?
答案 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循环。