C# 4.0 полное руководство - 2011
Шрифт:
class Jagged {
static void Main {
var jagged = new[] {
new [ ] { 1, 2, 3, 4 }, new[] { 9, 8, 7 }, new[] { 11, 12, 13, 14, 15 }
};
for(int j =0; j < jagged.Length; j++) {
for(int i-0; i < jagged[j].Length; i++)
Console.Write(jagged[j] [i] + " ") ;
Console.WriteLine;
}
}
}
Выполнение этой программы дает следующий результат.
12 3 4 9 8 7
11 12 13 14 15
Обратите
var jagged = new[] {
new [ ] { 1, 2, 3, 4 }, new[] { 9, 8, 7 },
new [ ] { 11, 12, 13, 14, 15 }
};
Как видите, оператор new [ ] используется в этом объявлении двояким образом. Во-первых, этот оператор создает массив массивов. И во-вторых, он создает каждый массив в отдельности, исходя из количества инициализаторов и их типа. Как и следовало ожидать, все инициализаторы отдельных массивов должны быть одного и того же типа. Таким образом, к объявлению любого неявно типизированного ступенчатого массива применяется тот же самый общий подход, что и к объявлению обычных ступенчатых массивов.
Как упоминалось выше, неявно типизированные массивы чаще всего применяются в LINQ-ориентированных запросах. А в остальных случаях следует использовать явно типизированные массивы.
Оператор цикла f oreach
Как упоминалось в главе 5, в языке C# определен оператор цикла f oreach, но его рассмотрение было отложено до более подходящего момента. Теперь этот момент настал.
Оператор f oreach служит для циклического обращения к элементам коллекции, представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора цикла foreach.
foreach (тип имя_переменной_цикла in коллекция) оператор;
Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип переменной цикла должен соответствовать типу элемента массива. Кроме того, тип может обозначаться ключевым словом var. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами, как будет показано далее в данной книге. Но, как правило, тип указывается явным образом.
Оператор цикла foreach действует следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными. Следовательно, оператор foreach циклически опрашивает массив по отдельным его элементам от начала и до конца.
Следует, однако, иметь в виду, что переменная цикла в операторе foreach
Ниже приведен простой пример применения оператора цикла foreach. В этом примере сначала создается целочисленный массив и задается ряд его первоначальных значений, а затем эти значения выводятся, а по ходу дела вычисляется их сумма.
// Использовать оператор цикла foreach.
using System;
class ForeachDemo { static void Main {
int sum = 0;
int[] nums = new int [10];
// Задать первоначальные значения элементов массива nums. for(int i = 0; i < 10; i++) nums[i] = i;
// Использовать цикл foreach для вывода значений // элементов массива и подсчета их суммы, foreach(int х in nums) {
Console.WriteLine("Значение элемента равно: " + х); sum += х;
}
Console.WriteLine("Сумма равна: " + sum);
}
}
Выполнение приведенного выше кода дает следующий результат.
Значение
элемента
равно:
0
Значение
элемента
равно:
1
Значение
элемента
равно:
2
Значение
элемента
равно:
3
Значение
элемента
равно:
4
Значение
элемента
равно:
5
Значение
элемента
равно:
6
Значение
элемента
равно:
7
Значение
элемента
равно:
8