Ответ 1
Если вы используете общую коллекцию (Collection (of T)), вы можете использовать метод IndexOf.
For Each El in Collection
Write(Collection.IndexOf(El) & " = " & El)
Next
Когда-то в 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
Есть ли другой способ получить индекс?
Если вы используете общую коллекцию (Collection (of T)), вы можете использовать метод IndexOf.
For Each El in Collection
Write(Collection.IndexOf(El) & " = " & El)
Next
Я считаю, что ваш оригинальный способ сделать это с помощью счетной переменной - самый эффективный способ сделать это. Использование Linq или IndexOf убьет производительность.
Dim i as Integer = 0
For Each obj In myList
'Do stuff
i+=1
Next
Если вам нужен индекс, то цикл 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.