.NET ofrece un contenedor de lista genérico cuyo rendimiento es casi idéntico (consulte la pregunta Rendimiento de matrices frente a listas). Sin embargo, son bastante diferentes en la inicialización.
Las matrices son muy fáciles de inicializar con un valor predeterminado y, por definición, ya tienen cierto tamaño:
string[] Ar = new string[10];
Lo que permite a uno asignar de forma segura elementos aleatorios, digamos:
Ar[5]="hello";
con la lista, las cosas son más complicadas. Puedo ver dos formas de hacer la misma inicialización, ninguna de las cuales es lo que llamarías elegante:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
o
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
¿Cuál sería una forma más limpia?
EDITAR: Las respuestas hasta ahora se refieren a la capacidad, que es algo más que rellenar previamente una lista. Por ejemplo, en una lista recién creada con una capacidad de 10, no se puede hacerL[2]="somevalue"
EDICIÓN 2: La gente se pregunta por qué quiero usar las listas de esta manera, ya que no es la forma en que deben usarse. Puedo ver dos razones:
Se podría argumentar de manera bastante convincente que las listas son los arreglos de la "próxima generación", lo que agrega flexibilidad sin casi ninguna penalización. Por lo tanto, uno debería usarlos por defecto. Estoy señalando que es posible que no sean tan fáciles de inicializar.
Lo que estoy escribiendo actualmente es una clase base que ofrece una funcionalidad predeterminada como parte de un marco más grande. En la funcionalidad predeterminada que ofrezco, el tamaño de la Lista se conoce de manera avanzada y, por lo tanto, podría haber usado una matriz. Sin embargo, quiero ofrecer a cualquier clase base la posibilidad de ampliarla dinámicamente y, por tanto, opto por una lista.
List
no es un reemplazo para Array
. Resuelven problemas claramente separados. Si quieres un tamaño fijo, quieres un Array
. Si usa un List
, lo está haciendo mal.