.NET propose un conteneur de liste générique dont les performances sont presque identiques (voir la question Performances des tableaux par rapport aux listes). Cependant, ils sont assez différents dans l'initialisation.
Les tableaux sont très faciles à initialiser avec une valeur par défaut et, par définition, ils ont déjà une certaine taille:
string[] Ar = new string[10];
Ce qui permet d'attribuer en toute sécurité des éléments aléatoires, par exemple:
Ar[5]="hello";
avec la liste, les choses sont plus délicates. Je peux voir deux façons de faire la même initialisation, dont aucune n'est ce que vous appelleriez élégant:
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);
Quelle serait une manière plus propre?
EDIT: Les réponses jusqu'à présent se réfèrent à la capacité, qui est autre chose que pré-peupler une liste. Par exemple, sur une liste qui vient d'être créée avec une capacité de 10, on ne peut pas faireL[2]="somevalue"
EDIT 2: Les gens se demandent pourquoi je veux utiliser les listes de cette façon, car ce n'est pas la façon dont elles sont destinées à être utilisées. Je peux voir deux raisons:
On pourrait affirmer de manière assez convaincante que les listes sont les tableaux de la «prochaine génération», ajoutant de la flexibilité avec presque aucune pénalité. Il faut donc les utiliser par défaut. Je souligne qu'ils ne seront peut-être pas aussi faciles à initialiser.
Ce que j'écris actuellement est une classe de base offrant des fonctionnalités par défaut dans le cadre d'un cadre plus large. Dans la fonctionnalité par défaut que j'offre, la taille de la liste est connue à l'avance et j'aurais donc pu utiliser un tableau. Cependant, je souhaite offrir à toute classe de base la possibilité de l'étendre dynamiquement et j'opte donc pour une liste.
List
ne remplace pas Array
. Ils résolvent des problèmes bien distincts. Si vous voulez une taille fixe, vous voulez un fichier Array
. Si vous utilisez a List
, vous ne le faites pas correctement.