Оператор цикла foreach имеет одну из следующих
форм:
foreachпеременнаяinконтейнерdo
оператор
или
foreachпеременная:типinконтейнерdo
оператор
или
foreach varпеременнаяinконтейнерdo
оператор
В качестве контейнера может фигурировать динамический массив,
строка, множество, а также любой контейнер, удовлетворяющий интерфейсу
IEnumerable или
IEnumerable<T>(например, List<T>,
Dictionary<Key,Value> и т.д.). Переменная цикла
должна иметь тип, совпадающий с типом элементов контейнера
(если контейнер удовлетворяет интерфейсу
IEnumerable, то это тип object). В последней форме
foreach тип переменной цикла автовыводится по типу элементов
контейнера.
Переменная цикла пробегает все значения элементов контейнера и для каждого значения переменной цикла выполняется тело цикла. Изменение переменной цикла внутри тела цикла не меняет элементы контейнера, т.е. они доступны только на чтение.
Например:
var
ss: set of string := ['Иванов','Петров','Сидоров'];
a: array of integer := (3,4,5);
b: array [1..5] of integer := (1,3,5,7,9);
l := new List<real>;
begin
foreach s: string in ss do
write(s,' ');
writeln;
foreach x: integer in a do
write(x,' ');
writeln;
foreach var x in b do
write(x,' ');
writeln;
foreach var r in l do
write(r,' ');
end.