C#
Массивы C#: как создать, заполнить и пройти циклом
Массив в C# хранит несколько значений одного типа: числа, строки, объекты. Размер массива задается при создании и дальше не меняется. К элементам обращаются по индексу, а количество элементов узнают через свойство Length
Создать массив
Массив из пяти чисел:
int[] numbers = new int[5];
Пока значения не заданы, элементы равны 0, потому что это значение по умолчанию для int
Можно сразу записать значения:
int[] numbers = { 10, 20, 30, 40, 50 };
string[] names = { "Анна", "Илья", "Мария" };
Тип указывается один раз: int[] означает массив целых чисел, string[] — массив строк
Индексы
Индексы начинаются с нуля:
Console.WriteLine(numbers[0]); // 10
Console.WriteLine(numbers[1]); // 20
Последний элемент имеет индекс Length - 1:
Console.WriteLine(numbers[numbers.Length - 1]);
Если обратиться к индексу за пределами массива, будет ошибка IndexOutOfRangeException
Заполнить массив циклом
int[] numbers = new int[5];
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = (i + 1) * 10;
}
После цикла в массиве будут значения 10, 20, 30, 40, 50
Для вывода удобно использовать foreach:
foreach (int number in numbers)
{
Console.WriteLine(number);
}
foreach хорош, когда нужно просто пройти по всем элементам. for нужен, когда важен индекс или нужно записывать значения по позициям
Изменить элемент
numbers[2] = 99;
Это заменит третий элемент, потому что индекс 2 означает третью позицию
Массив строк
string[] products = { "Курс", "Консультация", "Аудит" };
foreach (string product in products)
{
Console.WriteLine(product);
}
Массивы строк часто используют для меню, списков названий, простых справочников
Можно вывести меню с номерами:
for (int i = 0; i < products.Length; i++)
{
Console.WriteLine($"{i + 1}. {products[i]}");
}
Здесь пользователю показывают номера с единицы, но внутри кода массив все равно читается по индексам с нуля
Если пользователь выбирает пункт меню, его ввод обычно нужно уменьшить на единицу:
int userChoice = 2;
int index = userChoice - 1;
Console.WriteLine(products[index]);
Так внешний номер меню и внутренний индекс не смешиваются
Массив или List
Массив удобен, когда размер известен заранее: 12 месяцев, 7 дней недели, 5 оценок. Если количество элементов будет меняться, чаще удобнее List<T>
List<string> tasks = new();
tasks.Add("Позвонить клиенту");
tasks.Add("Отправить счет");
У списка есть Add, а у массива нет. Зато массив проще и хорошо подходит для первых задач на циклы и индексы
Частые ошибки
Первая ошибка — думать, что первый элемент имеет индекс 1. В C# первый индекс всегда 0. Вторая — писать numbers[numbers.Length], хотя последний индекс numbers.Length - 1. Третья — пытаться добавить элемент в массив без создания нового массива или перехода на List<T>. Четвертая — путать Length у массива и Count у списка
Еще одна частая путаница — ожидать, что массив сам увеличится при присваивании нового индекса. Так не работает: numbers[10] = 5 не расширит массив, а вызовет ошибку, если в массиве меньше одиннадцати элементов
Мини-задача: создайте массив из пяти оценок, выведите все оценки, посчитайте сумму и среднее значение. Затем замените одну оценку по индексу и снова выведите массив
Что почитать дальше по C#
- List, Dictionary и LINQ в C#
- Типы, переменные и строки в C#
- Типы, переменные и строки в C#
- Рубрика C#
Что почитать дальше по C#
Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:
- C# с нуля: первый проект через dotnet new
- Как создать окно в C#: WinForms и WPF
- Как создать форму в си шарп: первый Windows Forms пример
- Как установить .NET SDK для C#