Тем не менее, распределение 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: Люди задаются вопросом, почему я хочу использовать списки таким образом, поскольку это не так, как они предназначены для использования. Я вижу две причины:

Можно вполне убедительно утверждать, что списки являются массивами «следующего поколения», добавляя гибкость практически без штрафа. Поэтому их следует использовать по умолчанию. Я подчеркиваю, что их не так просто инициализировать.

В настоящее время я пишу базовый класс, предлагающий функциональность по умолчанию как часть более широкой структуры. В функциональности по умолчанию, которую я предлагаю, размер списка известен заранее, и поэтому я мог бы использовать массив. Однако я хочу предложить любому базовому классу возможность динамически расширять его, и поэтому я выбираю список.

Ответы на вопрос(14)

Ваш ответ на вопрос