Тем не менее, распределение List a циклов может быть быстрее, так как List является встроенным классом, но C # является jit-скомпилированным sooo ...
предлагает универсальный контейнер списков, производительность которого практически идентична (см. Вопрос «Производительность массивов и списков»). Однако они довольно разные по инициализации.
Массивы очень легко инициализировать значением по умолчанию, и по определению они уже имеют определенный размер:
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: Люди задаются вопросом, почему я хочу использовать списки таким образом, поскольку это не так, как они предназначены для использования. Я вижу две причины:
Можно вполне убедительно утверждать, что списки являются массивами «следующего поколения», добавляя гибкость практически без штрафа. Поэтому их следует использовать по умолчанию. Я подчеркиваю, что их не так просто инициализировать.
В настоящее время я пишу базовый класс, предлагающий функциональность по умолчанию как часть более широкой структуры. В функциональности по умолчанию, которую я предлагаю, размер списка известен заранее, и поэтому я мог бы использовать массив. Однако я хочу предложить любому базовому классу возможность динамически расширять его, и поэтому я выбираю список.