.NET пропонує контейнер із загальним списком, продуктивність якого майже однакова (див. Питання Performance of Arrays vs. Lists). Однак при ініціалізації вони досить різні.
Масиви дуже легко ініціалізувати зі значенням за замовчуванням, і за визначенням вони вже мають певний розмір:
string[] Ar = new string[10];
Що дозволяє безпечно призначити випадкові предмети, скажімо:
Ar[5]="hello";
зі списком речі більш складні. Я бачу два способи зробити ту саму ініціалізацію, жоден з яких ви б не назвали елегантною:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
або
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Який би був чистіший спосіб?
EDIT: На сьогодні відповіді стосуються можливості, яка є чимось іншим, ніж попереднє заповнення списку. Наприклад, у щойно створеному списку місткістю 10, цього не можна робитиL[2]="somevalue"
EDIT 2: Люди задаються питанням, чому я хочу використовувати списки таким чином, оскільки це не той спосіб, яким вони призначені для використання. Я бачу дві причини:
Можна досить переконливо стверджувати, що списки - це масиви "наступного покоління", додаючи гнучкість майже без штрафу. Тому слід використовувати їх за замовчуванням. Я вказую, що їх може бути не так просто ініціалізувати.
Зараз я пишу базовий клас, який пропонує функціонал за замовчуванням як частину більш широкої основи. У пропонованій мені програмі за замовчуванням розмір списку відомий розширено, тому я міг би використовувати масив. Однак я хочу запропонувати будь-якому базовому класу можливість його динамічно розширити, і тому я вибираю список.
List
не є заміною Array
. Вони вирішують виразно окремі проблеми. Якщо ви хочете фіксованого розміру, ви хочете Array
. Якщо ви використовуєте a List
, ви робите це неправильно.