.NET offre un contenitore di elenchi generico le cui prestazioni sono quasi identiche (vedere la domanda sulle prestazioni di array e sugli elenchi). Tuttavia sono abbastanza diversi nell'inizializzazione.
Gli array sono molto facili da inizializzare con un valore predefinito e per definizione hanno già una certa dimensione:
string[] Ar = new string[10];
Ciò consente di assegnare in modo sicuro elementi casuali, ad esempio:
Ar[5]="hello";
con l'elenco le cose sono più complicate. Posso vedere due modi per eseguire la stessa inizializzazione, nessuno dei quali è ciò che chiameresti 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);
Quale sarebbe un modo più pulito?
EDIT: Le risposte finora si riferiscono alla capacità, che è qualcos'altro rispetto al pre-compilare un elenco. Ad esempio, su un elenco appena creato con una capacità di 10, non si può fareL[2]="somevalue"
EDIT 2: le persone si chiedono perché voglio usare gli elenchi in questo modo, poiché non è il modo in cui sono destinati ad essere utilizzati. Posso vedere due ragioni:
Si potrebbe sostenere in modo abbastanza convincente che gli elenchi sono gli array di "nuova generazione", aggiungendo flessibilità quasi senza penalità. Pertanto si dovrebbero usarli per impostazione predefinita. Sto facendo notare che potrebbero non essere così facili da inizializzare.
Quello che sto scrivendo attualmente è una classe base che offre funzionalità predefinite come parte di un framework più grande. Nella funzionalità predefinita che offro, la dimensione dell'elenco è nota in avanzato e quindi avrei potuto utilizzare un array. Tuttavia, voglio offrire a qualsiasi classe base la possibilità di estenderla dinamicamente e quindi opto per un elenco.
List
non è un sostituto di Array
. Risolvono problemi nettamente separati. Se vuoi una dimensione fissa, vuoi un file Array
. Se usi a List
, lo stai facendo male.