Неявно типизированный массив объявляется с помощью ключевого слова var, но без последующих квадратных скобок [ ]. Кроме того, неявно типизированный массив должен быть непременно инициализирован, поскольку по типу инициализаторов определяется тип элементов данного массива. Все инициализаторы должны быть одного и того же согласованного типа. Ниже приведен пример объявления неявно типизированного массива.
var vals = new[] { 1, 2, 3, 4, 5 };
В данном примере создается массив типа int
, состоящий из пяти элементов. Ссылка на этот массив присваивается переменной vals. Следовательно, тип этой переменной соответствует типу int
массива, состоящего из пяти элементов. Обратите внимание на то, что в левой части приведенного выше выражения отсутствуют квадратные скобки [ ]. А в правой части этого выражения, где происходит инициализация массива, квадратные скобки присутствуют. В данном контексте они обязательны.
Рассмотрим еще один пример, в котором создается двумерный массив типа double.
var vals = new[,] { {1.1, 2.2}, {3.3, 4.4}, { 5.5, 6.6} };
В данном случае получается массив vals
размерами 2x3.
Объявлять можно также неявно типизированные ступенчатые массивы. В качестве примера рассмотрим следующую программу.
// Продемонстрировать неявно типизированный ступенчатый массив.
using System;
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();
}
}
}
Выполнение этой программы дает следующий результат.
1 2 3 4
9 8 7
11 12 13 14 15
Обратите особое внимание на объявление массива jagged
.
var jagged = new[] {
new[] { 1, 2, 3, 4 },
new[] { 9, 8, 7 },
new[] { 11, 12, 13, 14, 15 }
};
Как видите, оператор new[]
используется в этом объявлении двояким образом. Во-первых, этот оператор создает массив массивов. И во-вторых, он создает каждый массив в отдельности, исходя из количества инициализаторов и их типа. Как и следовало ожидать, все инициализаторы отдельных массивов должны быть одного и того же типа. Таким образом, к объявлению любого неявно типизированного ступенчатого массива применяется тот же самый общий подход, что и к объявлению обычных ступенчатых массивов.
Как упоминалось выше, неявно типизированные массивы чаще всего применяются в LINQ-ориентированных запросах. А в остальных случаях следует использовать явно типизированные массивы.
Как упоминалось в главе 5, в языке C# определен оператор цикла foreach
, но его рассмотрение было отложено до более подходящего момента. Теперь этот момент настал.
Оператор foreach
служит для циклического обращения к элементам коллекции , представляющей собой группу объектов. В C# определено несколько видов коллекций, каждая из которых является массивом. Ниже приведена общая форма оператора цикла foreach
.
foreach (тип имя_переменной_цикла in коллекция) оператор ;
Здесь тип имя_переменной_цикла обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach
. А коллекция обозначает циклически опрашиваемую коллекцию, которая здесь и далее представляет собой массив. Следовательно, тип переменной цикла должен соответствовать типу элемента массива. Кроме того, тип может обозначаться ключевым словом var
. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами, как будет показано далее в данной книге. Но, как правило, тип указывается явным образом.
Оператор цикла foreach
действует следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все элементы массива окажутся выбранными. Следовательно, оператор foreach
циклически опрашивает массив по отдельным его элементам от начала и до конца.
Читать дальше