Переменные в C#. Способы объявления массивов

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

Вступление

Данная статься будет организована попунктно — сначала рассмотрим обобщенно про массивы, а далее перейдем к многомерностям. Данная статья не последняя, могут быть продолжения по схожим тематикам, а C# есть много механизмов, относящихся к структурам(structure), спискам(List), словарям(Dictionary), хэш-таблицы(хэш-таблицы), потокобезопасные коллекции(Concurrent), строго типизированные коллекции(Generic), коллекциям объектной модели(ObjectModel), специализированные коллекции(Specialized). Ну в общем, тема большая и без грамотного составления структуры обучения будет очень сложно все это понять.

Способы объявления и инициализации одномерных массивов в C#

Давайте сразу скажем, что в C# имеются 5 способов объявления и инициализации массивов:

  1. Инициализировать при объявлении без спецификация ранга. При данном подходе индекс во второй части опускается и он берется автоматом при подсчете значений инициализации:
    int[] myArray = new int[] { 1, 3, 5, 7, 9};

     

  2. Инициализация без указания повтора типа переменных после равенства. При данном походе размер массива также, как и в первом случае, рассчитывается автоматом, исходя из количества значений, участвующих в инициализации переменных внутри массива:
    string[] myArray = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

     

  3. Можно объявить переменную массива без инициализации, но при присвоении массива этой переменной нужно использовать оператор new:
    int[] myArray;
    myArray = new int[] { 1, 3, 5, 7, 9 };

     

  4. В C# массивом может быть не только любой базовый тип, но и класс. В понимании C# типом считается и класс, в том числе:
    class MyType{
        public string mField;
    }
    MyType[] myArray = new MyType[10];
    MyType myTypeVar0 = new MyType();
    myTypeVar0.mField = "Text 0";
    MyType myTypeVar1 = new MyType();
    myTypeVar1.mField = "Text 1";
    ...
    myArray[0]=myTypeVar0;
    myArray[1]=myTypeVar1;
    ...
  5. В C# массив может принимать любой тип данных, если при инициализации указать тип object. Данный тип является родоначальником всех типов и поэтому может принимать любой тип:
    object[] myArray = new object[]{1, "text", 1.2, 'A'};

Способы объявления и инициализации многомерных массивов в C#

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

  1. Многомерный массив в C# может иметь много измерений до бесконечности, но больше 2-х на практике редко используются:
    int[] myArray1 = new int[4];//Массив 1-го измерения
    int[,] myArray2 = new int[4, 5];//Массив 2-го измерения
    int[,,] myArray3 = new int[4, 5, 7];//Массив 3-го измерения
    int[,,,] myArray4 = new int[4, 5, 7, 9];//Массив 4-го измерения
    ...

     

  2. Массив можно инициализировать при объявлении, как показано в следующем примере:
    int[,] myArray2 = new int[2, 2]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  3. Можно опустить указание размерности:
    int[,] myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  4. Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new:
    int[,] myArray2;
     myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  5. Следующий пример присваивает значение конкретному элементу массива:
    int[,] myArray2 = new int[2 , 2];//Массив 2-го измерения
    myArray2[1, 2] = 10;//Инициализируем отдельный элемент в массиве

     

Способы объявления и инициализации массивы массивов в C#

Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются «невыровненными массивами». В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов.

  1. Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел:
    int[][] myArray = new int[3][];

     

  2. Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом:
    myArray[0] = new int[5];
    myArray[1] = new int[4];
    myArray[2] = new int[2];

     

  3. Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется:
    myArray[0] = new int[] { 1, 3, 5, 7, 9 };
    myArray[1] = new int[] { 0, 2, 4, 6 };
    myArray[2] = new int[] { 11, 22 };

     

  4. Также массив можно инициализировать путем объявления:
     int[][] myArray = new int[][] 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  5. Также можно использовать сокращенную форму. Обратите внимание, что при инициализации элементов оператор new опускать нельзя, так как инициализации по умолчанию для этих элементов не существует:
      int[][] myArray = 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  6. Разреженный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null:
    myArray[0][1] = 77;
    myArray[2][1] = 88;

     

  7. Массивы массивов можно смешивать с многомерными массивами. Ниже показано объявление и инициализация одномерного массива массивов, состоящего из трех двумерных элементов различного размера:
    int[][,] myArray = new int[3][,] 
    {
        new int[,] { {1,3}, {5,7} },
        new int[,] { {0,2}, {4,6}, {8,10} },
        new int[,] { {11,22}, {99,88}, {0,9} } 
    };

     

  8. Доступ к отдельным элементам выполняется как показано в примере ниже, где отображено значение элемента [1,0] первого массива (значение 5):
    System.Console.Write("{0}", myArray[0][1, 0]);

     

  9. Метод Length возвращает число массивов, содержащихся в массиве массивов. Например, если объявить предыдущий массив, мы получим следующее:
    System.Console.WriteLine(myArray.Length);