Книга: C# для профессионалов. Том II
foreach
foreach
C# предоставляет дополнительную инструкцию управления потоком выполнения foreach
. foreach
делает цикл по всем элементам массива или коллекции, не требуя явной спецификации индексов. Цикл foreach
на массиве может выглядеть следующим образом. В этом примере предполагается, что MyArray
является массивом double
, и необходимо вывести каждое значение в консольном окне. Чтобы сделать это, используем следующий код:
foreach (double SomeElement in MyArray) {
Console.WriteLine(SomeElement);
}
Отметим что в этом цикле SomeElement
является именем, присвоенным переменной для итерации по циклу; здесь можно выбрать любое имя не конфликтующее с другими именами переменных.
Запишем также приведенный выше цикл следующим образом:
foreach (double SomeElement in MyArray)
Console.WriteLine(SomeElement);
так как блочные инструкции в C# работают таким же образом, как составные инструкции в C++.
Этот цикл будет иметь точно такой же результат, как и следующий:
for (int I=0; I < MyArray.Length; I++) {
Console.WriteLine(MyArray[i]);
}
(Отметим, что вторая версия иллюстрирует также, как получить число элементов в массиве в C#. Мы рассмотрим, как массив объявляется в C#, позже.)
Отметим, однако, что в отличие от доступа к элементам массива, цикл foreach
предоставляет к своим элементам доступ только для чтения. Следовательно, следующий код не будет компилироваться.
foreach (double SomeElement in MyArray)
SomeElement *= 2; // Неверно, для SomeElement нельзя выполнить
// присваивание
Мы упомянули, что цикл foreach
может использоваться для массивов или коллекций. Коллекция не имеет аналога в C++, хотя концепция стала общераспространённой в Windows благодаря ее использованию в VB и COM. Коллекция по сути является классом, который реализует интерфейс IEnumerable
. Так как это включает поддержку из базовых классов, понятие коллекция объясняется в главе 7.