Кроме установки переменной отладки и постепенного увеличения его каждый раз Вы запускаете foreach, когда Вы врываетесь с соединенным отладчиком Visual Studio, там способ сказать, что это - время Xth через цикл?
Я предполагаю, что это было бы функцией Visual Studio, если что-либо, не что-то, что будет добавлено к скомпилированному коду.
Вот предыдущий вопрос Stack Overflow, который, похоже, соответствует тому, что вы ищете: get-index-of-current-foreach-iteration
Ответ, процитированный по этой ссылке:
Foreach предназначен для итерации над коллекциями, которые реализуют IEnumerable. Он делает это, вызывая GetEnumerator на коллекции, который возвращает перечислитель.
У этого перечислителя есть метод и свойство:
- MoveNext()
- Current
Current возвращает объект, на котором в данный момент находится перечислитель, MoveNext обновляет Current до следующего объекта.
Очевидно, что понятие индекса чуждо понятию перечисления и не может быть реализована.
По этой причине большинство коллекций можно обойти, используя индексатор и конструкцию цикла for.
В этой ситуации я предпочитаю использовать цикл for, чем отслеживания индекса с помощью локальной переменной.
Установите точку останова внутри цикла, затем щелкните правой кнопкой мыши на точке останова, чтобы задать условия. Вы также можете щелкнуть правой кнопкой мыши, чтобы увидеть счетчик попаданий во время отладки и сбросить его, если хотите. Можно задать булево выражение, которое будет оцениваться при достижении точки останова для условного прерывания (или просто перехода).
Вы пробовали использовать утверждение при отладке? Отладчик будет запущен именно в этом месте вашего кода:
Например: System.Diagnostics.Debug.Assert (myValue> = 0)
Если все, что вы повторяете, поддерживает метод IndexOf (), вам не нужно устанавливать переменную отладки.
Как в этом примере:
foreach (var i in myList)
{
reportprogress(myList, i);
//Do stuff
}
private void reportprogress<T>(List<T> l, T i)
{
progressBar1.Value = ((l.IndexOf(i)) * 100) / l.Count;
Application.DoEvents();
}
Возможно, вы можете использовать счетчик попаданий в точку останова. Это не совсем то, что вам нужно, но может быть полезно.
Также есть ли какая-нибудь серьезная причина, почему вы не хотите использовать for
цикл в этом случае.