Если вы ищете метод, а не магическую функцию, которая уже существует, то, честно говоря, лучшего способа нет. Мы все могли бы написать фрагменты кода с умными трюками для ограниченного набора символов, но в конце дня в какой-то момент вы должны преобразовать символы.
Лучший подход для этого преобразования - сделать это до сравнения. Это дает вам большую гибкость, когда речь идет о схемах кодирования, о которых ваш действительный оператор сравнения должен не знать.
Конечно, вы можете «скрыть» это преобразование за своей собственной строковой функцией или классом, но вам все равно нужно преобразовать строки перед сравнением.
К сожалению, вам придется делать это самостоятельно. Конструкция For Each
использует реализацию интерфейса IEnumerator
для итерации последовательности, а интерфейс IEnumerator
не предоставляет никаких элементов, чтобы указать его положение или текущий индекс в пределах последовательность.
Тебе придется сделать это самому. В основном, если вы выполняете For Each (foreach в C #), то вам не важно количество итераций.
Циклы Foreach для каждого элемента M, который он находит в коллекции элементов M.
Итак, нет, здесь нет явного количества итераций, как в цикле FOR.
Если мне нужна переменная итератора, я использую вместо этого цикл for
(каждый IEnumerable должен иметь свойство .Count).
Вместо
For Each element as MyType in MyList
....
Next
напишите
For i as integer = 0 to MyList.Count - 1
element = MyList(i)
....
Next
, что будет таким же результатом. У вас есть i
в качестве итератора, а элемент
содержит текущий элемент.
Если вы используете Visual Studio 2009 (или VB.Net 9.0), вы можете использовать переопределение Select, чтобы получить счетчик значений.
For Each cur in col.Select(Function(x,i) New With { .Index = i, .Value = x })
...
Next