PascalABC.NET

Оператор цикла foreach

Оператор цикла 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.