Оператор foreach застосовується для перебору елементів в організованій групі даних. Масив є саме такою групою. Зручність цього циклу полягає в тому, що не потрібно визначати кількість елементів в групі і виконувати їх перебір по індексу. Синтаксис оператора:
foreach (тип ім'я in вираз ) тіло_циклу
Ім'я задає локальну по відношенню до циклу змінну, яка по черзі набуватиме всіх значень з масиву. В якості виразу найчастіше застосовується ім'я масиву. У простому або складеному операторові, що є тілом циклу, виконуються дії із змінною циклу. Тип змінної повинен відповідати типу елементу масиву.
Наприклад, заданий масив:
int[] а = {24, 50, 18, 3, 16, -7, 9, -1 };
Виведення цього масиву на екран за допомогою оператора foreach виглядає таким чином:
foreach (int х in а ) Console.WriteLine( х );
У лістингу 6.8 вирішується те ж завдання, що і в лістингу 6.1, але з використанням циклу foreach. Зверніть увагу на те, наскільки зрозуміліше стала програма.
Лістинг 6.8. Робота з одновимірним масивом з використанням циклу foreach
using System;
namespace ConsoleApplication1
{
class Classl
{
static void Main( )
{
const int n = 6;
int[] a = new int[n] {3, 12, 5, -9, 8, -4};
Console.WriteLine("Исходный массив:");
foreach ( int elem in a )
Console.Write( "\t" + elem );
Console.WriteLine( );
long sum = 0; // сума від’ємних елементів
int num = 0; // кількість від’ємних елементів
foreach (int elem in a )
if ( elem < 0 )
{
sum += elem;
num ++;
}
Console.WriteLine( "Сума від’ємних елементів= " + sum );
Console.WriteLine("Кількість від’ємних елементів = " + num);
int max = a[0]; // максимальний елемент
foreach ( int elem in a )
if ( elem > max ) max = elem;
Console.WriteLine("Максимальний елемент = " + max );
}
}
}
Обмеженням оператора foreach є те, що з його допомогою можна тільки переглядати значення в групі даних, але не змінювати їх.