Да Счет будет оцениваться на каждом проходе. Причина в том, что коллекция может быть изменена во время выполнения цикла. Учитывая структуру цикла, переменная i должна представлять действительный индекс в коллекции во время итерации. Если проверка не была сделана на каждом цикле, то это неправдоподобно. Пример дела
for ( int i = 0; i < collection.Count; i++ ) {
collection.Clear();
}
Единственным исключением из этого правила является цикл по массиву, где ограничение - это длина.
for ( int i = 0; i < someArray.Length; i++ ) {
// Code
}
CLR JIT будет в особых случаях использовать этот тип цикла при определенных обстоятельствах, поскольку длина массива не может измениться. В этих случаях проверка границ будет выполняться только один раз.
Ссылка: http://blogs.msdn.com/brada/archive/2005/04/23/411321.aspx