← Все вопросы

В чём разница между массивом и List в C#? Когда что использовать?

Задан 6 месяцев назад737 просмотров2 ответа
8

Только начал C#. Вижу два способа хранить набор чисел — массив int[] и List<int>. Чем они отличаются и что выбирать новичку? Массив объявляю так:

int[] numbers = new int[3];
numbers[0] = 10;

А в List, говорят, размер можно менять. Поясните, пожалуйста.

2 ответа

15
✓ Принятый ответ — помог автору

Главное отличие: массив имеет фиксированный размер, а List<T> — динамический, в него можно добавлять и удалять элементы.

Массив (array):

int[] numbers = new int[3];   // ровно 3 элемента, больше не влезет
numbers[0] = 10;
int[] primes = { 2, 3, 5, 7 }; // короткая инициализация
Console.WriteLine(primes.Length); // 4

List<T> — растёт по мере надобности:

using System.Collections.Generic;

var list = new List<int>();
list.Add(10);          // добавить в конец
list.Add(20);
list.Insert(0, 5);     // вставить по индексу
list.Remove(20);       // удалить по значению
list.RemoveAt(0);      // удалить по индексу
Console.WriteLine(list.Count); // у List это Count, а не Length

Как выбирать:

  • Массив — когда количество элементов известно заранее и не меняется (например, дни недели). Чуть быстрее и экономнее по памяти.
  • List<T> — в 90% случаев новичку нужен именно он, потому что почти всегда заранее не знаешь, сколько будет элементов.

Совет: начинайте с List<T>, переходите на массив только если уверены, что размер фиксирован и важна производительность.

4

Маленькая, но важная деталь, на которой все спотыкаются: у массива длина — это свойство Length, а у ListCount. Перепутаете — не скомпилируется.

int[] arr = { 1, 2, 3 };
var list = new List<int> { 1, 2, 3 };

Console.WriteLine(arr.Length);  // массив
Console.WriteLine(list.Count);  // список

И ещё: из списка легко получить массив и обратно:

int[] back = list.ToArray();
var fromArr = new List<int>(arr);

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект