Инициализировать массив массивов в C#
Пример
Следующий код показывает, как этот пример объявляет и инициализирует массив массивов, содержащий элементы управления Label.
// Массив массивов, содержащих квадраты. private Label[][] Squares; // Инициализация массива массивов, содержащих квадраты. private void Form1_Load(object sender, EventArgs e) { Squares = new Label[][] { new Label[] { lblSquare00, lblSquare01, lblSquare02}, new Label[] { lblSquare10, lblSquare11, lblSquare12}, new Label[] { lblSquare20, lblSquare21, lblSquare22}, }; }
Код объявляет массив массивов на уровне класса, поэтому он доступен для всех методов. Обработчик события Load формы затем инициализирует его.
В самой переменной Squares содержится Label [] []. Это фактически массив, каждый элемент которого является Label [].
Скобки заключают содержимое объекта, разделенные запятыми. Каждый из элементов также представляет собой массив, в этом случае содержащий элементы Label. Их содержимое также окружено фигурными скобками и разделяется запятыми.
Следующий код показывает, как программа очищает ярлыки.
// Очистить все квадраты. private void btnClear_Click(object sender, EventArgs e) { foreach (Label[] array in Squares) foreach (Label label in array) label.Text = ""; }
Существует несколько различий между этим примером и более ранним, использующим двумерный массив. В предыдущем примере использовался цикл foreach для циклического перемещения всех элементов управления Label в двумерном массиве. Эта версия не может этого сделать, потому что переменная Squares содержит массивы, а не элементы Label. Вместо этого эта версия проходит через Squares, чтобы получить свои массивы. Затем он проходит через каждый из этих массивов, чтобы получить доступ к элементам Label, которые он содержит.
Чтобы получить доступ к конкретному Label напрямую, в предыдущем примере использовался синтаксис, похожий на Squares [r, c]. Напротив, новая версия будет использовать синтаксис, аналогичный Squares [r] [c].
Менее очевидным различием между этими двумя подходами является то, что массивы этого примера не все должны содержать одинаковое количество элементов. Каждая строка содержит массив элементов Label, но декларация не указывает, что каждый из них должен быть одного размера. Например, следующий код также инициализирует массив.
Squares = new Label[][] { new Label[] { lblSquare00, lblSquare01, lblSquare02}, new Label[] { lblSquare10, lblSquare11}, new Label[] { lblSquare20}, };