.NET предлагает общий контейнер списков, производительность которого практически идентична (см. Вопрос «Производительность массивов и списков»). Однако они совершенно разные по инициализации.
Массивы очень легко инициализировать со значением по умолчанию, и по определению они уже имеют определенный размер:
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);
Что было бы чище?
РЕДАКТИРОВАТЬ: ответы пока относятся к емкости, которая представляет собой нечто иное, чем предварительное заполнение списка. Например, в только что созданном списке с емкостью 10 нельзя сделатьL[2]="somevalue"
РЕДАКТИРОВАТЬ 2: Люди задаются вопросом, почему я хочу использовать списки таким образом, поскольку они не предназначены для использования. Я вижу две причины:
Можно довольно убедительно утверждать, что списки - это массивы «следующего поколения», добавляющие гибкости практически без потерь. Поэтому их следует использовать по умолчанию. Я указываю, что их может быть не так просто инициализировать.
В настоящее время я пишу базовый класс, предлагающий функции по умолчанию как часть более крупной структуры. В предлагаемой мной функциональности по умолчанию размер списка известен заранее, поэтому я мог бы использовать массив. Однако я хочу предложить любому базовому классу возможность динамически расширять его, поэтому я выбираю список.
List
не заменяет Array
. Они решают совершенно разные задачи. Если вам нужен фиксированный размер, вам нужен файл Array
. Если вы используете a List
, вы делаете это неправильно.