Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 45 46 47 48 49 50 51 52 53 ... 407
приложения по имени FunWithArrays, содержащий вспомогательный метод SimpleArrays():

Console.WriteLine("***** Fun with Arrays *****");

SimpleArrays();

Console.ReadLine();

static void SimpleArrays()

{

  Console.WriteLine("=> Simple Array Creation.");

  // Создать и заполнить массив из 3 целых чисел.

  int[] myInts = new int[3];

  // Создать строковый массив из 100 элементов с индексами 0 - 99.

  string[] booksOnDotNet = new string[100];

  Console.WriteLine();

}

Внимательно взгляните на комментарии в коде. При объявлении массива C# с использованием подобного синтаксиса число, указанное в объявлении, обозначает общее количество элементов, а не верхнюю границу. Кроме того, нижняя граница в массиве всегда начинается с 0. Таким образом, в результате записи int[] myInts = new int[3] получается массив, который содержит три элемента, проиндексированные по позициям 0, 1, 2.

После определения переменной массива можно переходить к заполнению элементов от индекса к индексу, как показано ниже в модифицированном методе SimpleArrays():

static void SimpleArrays()

{

  Console.WriteLine("=> Simple Array Creation.");

  // Создать и заполнить массив из трех целочисленных значений.

  int[] myInts = new int[3];

  myInts[0] = 100;

  myInts[1] = 200;

  myInts[2] = 300;

  // Вывести все значения.

  foreach(int i in myInts)

  {

    Console.WriteLine(i);

  }

  Console.WriteLine();

}

На заметку! Имейте в виду, что если массив объявлен, но его элементы явно не заполнены по каждому индексу, то они получат стандартное значение для соответствующего типа данных (например, элементы массива bool будут установлены в false, а элементы массива int — в 0).

Синтаксис инициализации массивов C#

В дополнение к заполнению массива элемент за элементом есть также возможность заполнять его с применением синтаксиса инициализации массивов. Для этого понадобится указать значения всех элементов массива в фигурных скобках ({}). Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения. Например, вот как выглядят альтернативные версии объявления массива:

static void ArrayInitialization()

{

  Console.WriteLine("=> Array Initialization.");

  // Синтаксис инициализации массивов с использованием ключевого слова new.

  string[] stringArray = new string[]

    { "one", "two", "three" };

  Console.WriteLine("stringArray has {0} elements", stringArray.Length);

  // Синтаксис инициализации массивов без использования ключевого слова new.

  bool[] boolArray = { false, false, true };

  Console.WriteLine("boolArray has {0} elements", boolArray.Length);

  // Инициализация массива с применением ключевого слова new и указанием размера.

  int[] intArray = new int[4] { 20, 22, 23, 0 };

  Console.WriteLine("intArray has {0} elements", intArray.Length);

  Console.WriteLine();

}

Обратите внимание, что в случае использования синтаксиса с фигурными скобками нет необходимости указывать размер массива (как видно на примере создания переменной stringArray), поскольку размер автоматически вычисляется на основе количества элементов внутри фигурных скобок. Кроме того, применять ключевое слово new не обязательно (как при создании массива boolArray).

В случае объявления intArray снова вспомните, что указанное числовое значение представляет количество элементов в массиве, а не верхнюю границу. Если объявленный размер и количество инициализаторов не совпадают (инициализаторов слишком много или не хватает), тогда на этапе компиляции возникнет ошибка. Пример представлен ниже:

// Несоответствие размера и количества элементов!

int[] intArray = new int[2] { 20, 22, 23, 0 };

Понятие неявно типизированных локальных массивов

В главе 3 рассматривалась тема неявно типизированных локальных переменных. Как вы помните, ключевое слово var позволяет определять переменную, тип которой выводится компилятором. Аналогичным образом ключевое слово var можно использовать для определения неявно типизированных локальных массивов. Такой подход позволяет выделять память под новую переменную массива, не указывая тип элементов внутри массива (обратите внимание, что применение этого подхода предусматривает обязательное использование ключевого слова new):

static void DeclareImplicitArrays()

{

  Console.WriteLine("=> Implicit Array Initialization.");

  // Переменная а на самом деле имеет тип int[].

  var a = new[] { 1, 10, 100, 1000 };

  Console.WriteLine("a is a: {0}", a.ToString());

  // Переменная b на самом деле имеет тип doublet].

  var b = new[] { 1, 1.5, 2, 2.5 };

  Console.WriteLine("b is a: {0}", b.ToString());

  // Переменная с на самом деле имеет тип string [].

  var c = new[] { "hello", null, "world" };

  Console.WriteLine("c is a: {0}", c.ToString());

  Console.WriteLine();

}

Разумеется, как и при создании массива с применением явного синтаксиса С#, элементы в списке инициализации массива должны принадлежать одному и тому же типу (например, должны быть все int, все string или все SportsCar). В отличие от возможных ожиданий, неявно типизированный локальный массив не получает по умолчанию тип System.Object, так что следующий код приведет к ошибке на этапе компиляции:

// Ошибка! Смешанные типы!

var d = new[] { 1, "one", 2, "two", false };

Определение массива объектов

В большинстве случаев массив определяется путем указания явного типа элементов, которые могут в нем содержаться. Хотя это выглядит довольно прямолинейным, существует одна важная особенность. Как будет показано в главе 6, изначальным базовым классом для каждого типа (включая фундаментальные типы данных) в системе типов .NET Core является System.Object. С учетом такого факта, если определить массив типа данных System.Object, то его элементы могут представлять все что угодно. Взгляните на следующий метод ArrayOfObjects():

static void ArrayOfObjects()

{

  Console.WriteLine("=> Array of Objects.");

  // Массив объектов может содержать все что угодно.

  object[] myObjects = new object[4];

  myObjects[0] = 10;

  myObjects[1] = false;

  myObjects[2] = new DateTime(1969, 3, 24);

  myObjects[3] = "Form & Void";

  foreach (object obj in myObjects)

  {

    // Вывести тип и значение каждого элемента в массиве.

    Console.WriteLine("Type: {0}, Value: {1}", obj.GetType(), obj);

  }

 

1 ... 45 46 47 48 49 50 51 52 53 ... 407
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен бесплатно.

Оставить комментарий