2009-11-18 7 views

Répondre

5

Que diriez-vous:

IEnumerable<T> sequence = GetSequenceFromSomewhere(); 
List<T> list = new List<T>(sequence); 

Notez que ceci est optimisé pour la situation dans laquelle la séquence se trouve être un IList<T> - il utilise ensuite IList<T>.CopyTo. Il sera toujours O (n) dans la plupart des situations, mais potentiellement O (n) beaucoup plus rapide que l'itération :) (Il évite également tout redimensionnement comme il le crée.)

+0

Ce constructeur copie les éléments énumérés dans la nouvelle liste, donc je doute que ce soit plus rapide (et cela ne pourrait pas non plus être le cas). Mais c'est certainement plus facile. – GraemeF

+0

@GraemeF: Comme je l'ai noté, il * est * plus rapide si la séquence se trouve être un 'IList '. –

+0

Plus génériquement, ICollection 's CopyTo – SwDevMan81

3

Vous souhaitez utiliser la méthode .AddRange sur une liste générique.

List<string> strings = new List<string>(); 
strings.AddRange(...); 

.. ou le constructeur ..

new List<string>(...); 
Questions connexes