Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, GlebZ, Вы писали:
GZ>>А ты не сравнивай for и итератор. Это две разные категории. for — statement. iterator — паттерн который унифицирует и скрывает доступ. Эти вещи несравнимы так как обозначают два разных логических термина и служат для разных вещей.
А>А я по наивности своей считал, что они оба служат для перебора элементов коллекции или массива, с целью что-то с этими элементами делать в определённом порядке 
Ну попробуй написать for для коллекции.
for — это операция цикла с счетчиком. Почти синтаксический сахар для while. А используется ли она для индексируемого доступа к массиву, или не используется — это уже второй вопрос. В случае iterator — это есть перебор значений коллекции (не обязательно массива) по некоторому алгоритму. При этом алгоритм может быть любым, как простым, так и очень сложным.
Кроме того, для большинства случаев, а это записи типа
for(int i=0;i<arr.Length;i++)
val+=arr[i];
Здесь переменная i — есть суррогат который не несет никакой смысловой нагрузки. Пока ее не используют за пределами массива, или доступ не ограничен регионом, она бессмысленный мусор. В данном случае и сам цикл есть суррогат. Более наглядно что-то здесь будет что-то типа
Array.ForEach<T>(a => val+=a);
Но такое возможно только в C# 3.0. Пока что можно довольствоваться:
Array.ForEach<T>(delegate(int a){val+=a;});
Что несколько более многословно, но все таки более читабельно чем индексированный доступ через for. И заметь, в отличие от for такое работает для всех типов коллекций независимо от типа доступа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>