Я предполагаю, что вам нужно использовать индекс внутри цикла - в противном случае, просто используйте вместо этого цикл For Each.
1 - идиоматический способ для одномерного массива, на мой взгляд.Это наиболее близко к нормальному способу, который вы видели бы в C #:
for (int x = 0; x < array.Length; x++)
К сожалению, в наши дни VB имеет эту небольшую двойственную индивидуальность с точки зрения того, является ли он нулевым или единичным..NET, как правило, основывается на нулевой платформе, и вы страдаете из-за этого здесь;языки , разработанные вокруг API, основанных на нулях, могут упростить шаблон "включающая нижняя граница; исключительная верхняя граница" - тогда как VB включительно на обоих концах, поэтому вам нужен "-1".
2 выглядит как функция, специфичная для VB;Я бы постарался избежать этого, если они не дают существенных преимуществ, так как для не-VB программистов (например, для программистов на C #) будет труднее понять код.Во многих случаях это лишь незначительная проблема, но когда у нее нет реальных преимуществ, я бы придерживался «обычных» подходов .NET.
3 действительно предназначен для многомерных (прямоугольных) массивов- 0 говорит, что вы хотите измерение first .Когда вы имеете дело с одномерными массивами, это добавляет дополнительную сложность без веской причины.
возможно , что первый подход также наиболее эффективен - JIT распознает этот шаблон ивозможность удалить некоторые тесты границ массива в цикле (он знает, что x
находится в границах массива).Теперь UBound
может скомпилироваться в IL с таким же свойством - я не уверен.Я подозреваю, он вызывает метод в сборке Microsoft.VisualBasic, о которой JIT с меньшей вероятностью знает.