Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

В случае объявления

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);

}

Console.WriteLine;

}

Здесь во время прохода по содержимому массива

myObjects
для каждого элемента выводится лежащий в основе тип, получаемый с помощью метода
GetType
класса
System.Object
, и его значение.

Не вдаваясь пока в детали работы метода

System.Object.GetType
, просто отметим, что он может использоваться для получения полностью заданного имени элемента (службы извлечения информации о типах и рефлексии исследуются в главе 17). Приведенный далее вывод является результатом вызова метода
ArrayOfObjects
:

=> Array of Objects.

Type: System.Int32, Value: 10

Type: System.Boolean, Value: False

Type: System.DateTime, Value: 3/24/1969 12:00:00 AM

Type: System.String, Value: Form & Void

Работа с многомерными массивами

В дополнение к одномерным массивам, которые вы видели до сих пор, в языке C# поддерживаются два вида многомерных массивов. Первый вид называется прямоугольным массивом, который имеет несколько измерений, а содержащиеся в нем строки обладают одной и той же длиной. Прямоугольный многомерный массив объявляется и заполняется следующим образом:

static void RectMultidimensionalArray

{

Console.WriteLine("=> Rectangular multidimensional array.");

// Прямоугольный многомерный массив.

int[,] myMatrix;

myMatrix = new int[3,4];

// Заполнить массив (3 * 4).

for(int i = 0; i < 3; i++)

{

for(int j = 0; j < 4; j++)

Поделиться:
Популярные книги

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник