Добавить в цитаты Настройки чтения

Страница 78 из 502

<b>var vals = new[,] { {1.1, 2.2}, {3.3, 4.4}, { 5.5, 6.6} };</b>

В данном случае получается массив vals размерами 2x3.

Объявлять можно также неявно типизированные ступенчатые массивы. В качестве примера рассмотрим следующую программу.

<b>// Продемонстрировать неявно типизированный ступенчатый массив.</b>

<b>using System;</b>

<b>class Jagged {</b>

<b>  static void Main() {</b>

<b>    var jagged = new[] {</b>

<b>      new[] { 1, 2, 3, 4 }, </b>

<b>      new[] { 9, 8, 7 }, </b>

<b>      new[] { 11, 12, 13, 14, 15 }</b>

<b>    };</b>

<b>    for(int j = 0; j &lt; jagged.Length; j++) {</b>

<b>      for(int i = 0; i &lt; jagged[j].Length; i++)</b>

<b>        Console.Write(jagged[j] [i] + &quot; &quot;) ;</b>

<b>      Console.WriteLine();</b>

<b>    }</b>

<b>  }</b>

<b>}</b>

Выполнение этой программы дает следующий результат.

<b>1 2 3 4 </b>

<b>9 8 7</b>

<b>11 12 13 14 15</b>

Обратите особое внимание на объявление массива jagged.

<b>var jagged = new[]    {</b>

<b>  new[] { 1, 2, 3, 4 },</b>

<b>  new[] { 9, 8, 7 },</b>

<b>  new[] { 11, 12, 13, 14, 15 }</b>

<b>};</b>

Как видите, оператор new[] используется в этом объявлении двояким образом. Во-первых, этот оператор создает массив массивов. И во-вторых, он создает каждый массив в отдельности, исходя из количества инициализаторов и их типа. Как и следовало ожидать, все инициализаторы отдельных массивов должны быть одного и того же типа. Таким образом, к объявлению любого неявно типизированного ступенчатого массива применяется тот же самый общий подход, что и к объявлению обычных ступенчатых массивов.

Как упоминалось выше, неявно типизированные массивы чаще всего применяются в LINQ-ориентированных запросах. А в остальных случаях следует использовать явно типизированные массивы.

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

Как упоминалось в главе 5, в языке C# определен оператор цикла foreach, но его рассмотрение было отложено до более подходящего момента. Теперь этот момент настал.

Оператор foreach служит для циклического обращения к элементам коллекции, представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора цикла foreach.

<b>foreach <i>(тип имя_переменной_цикла</i> in <i>коллекция) оператор</i>;</b>

Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип переменной цикла должен соответствовать типу элемента массива. Кроме того, тип может обозначаться ключевым словом var. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами, как будет показано далее в данной книге. Но, как правило, тип указывается явным образом.

Оператор цикла foreach действует следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными. Следовательно, оператор foreach циклически опрашивает массив по отдельным его элементам от начала и до конца.

Следует, однако, иметь в виду, что переменная цикла в операторе foreach служит только для чтения. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива.

Ниже приведен простой пример применения оператора цикла foreach. В этом примере сначала создается целочисленный массив и задается ряд его первоначальных значений, а затем эти значения выводятся, а по ходу дела вычисляется их сумма.

<b>// Использовать оператор цикла foreach.</b>

<b>using System;</b>

<b>class ForeachDemo { </b>

<b>  static void Main() {</b>

<b>    int sum = 0;</b>

<b>    int[] nums = new int [10];</b>

<b>    // Задать первоначальные значения элементов массива nums. </b>

<b>    for(int i = 0; i &lt; 10; i++) nums[i] = i;</b>

<b>    // Использовать цикл foreach для вывода значений </b>

<b>    // элементов массива и подсчета их суммы, </b>

<b>    foreach(int х in nums) {</b>

<b>      Console.WriteLine(&quot;Значение элемента равно: &quot; + х); sum += х;</b>

<b>    }</b>

<b>    Console.WriteLine(&quot;Сумма равна: &quot; + sum);</b>

<b>  }</b>