.NET oferece um contêiner de lista genérico cujo desempenho é quase idêntico (consulte a pergunta Desempenho de matrizes vs. listas). No entanto, eles são bastante diferentes na inicialização.
Os arrays são muito fáceis de inicializar com um valor padrão e, por definição, eles já têm um determinado tamanho:
string[] Ar = new string[10];
O que permite atribuir itens aleatórios com segurança, por exemplo:
Ar[5]="hello";
com lista as coisas são mais complicadas. Posso ver duas maneiras de fazer a mesma inicialização, nenhuma delas é o que você chamaria de elegante:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
ou
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Qual seria uma maneira mais limpa?
EDITAR: As respostas até agora referem-se à capacidade, que é algo mais do que preencher previamente uma lista. Por exemplo, em uma lista recém-criada com capacidade para 10, não se pode fazerL[2]="somevalue"
EDIT 2: As pessoas se perguntam por que eu quero usar listas dessa forma, já que não é a maneira que elas devem ser usadas. Posso ver duas razões:
Alguém poderia argumentar de forma bastante convincente que as listas são os arrays da "próxima geração", adicionando flexibilidade quase sem penalidade. Portanto, deve-se usá-los por padrão. Estou apontando que eles podem não ser tão fáceis de inicializar.
O que estou escrevendo atualmente é uma classe base que oferece funcionalidade padrão como parte de uma estrutura maior. Na funcionalidade padrão que ofereço, o tamanho da Lista é conhecido com antecedência e, portanto, eu poderia ter usado um array. No entanto, quero oferecer a qualquer classe base a chance de estendê-la dinamicamente e, portanto, opto por uma lista.
List
não é um substituto para Array
. Eles resolvem problemas distintos. Se você deseja um tamanho fixo, deseja um Array
. Se você usar um List
, você está fazendo isso errado.