2009-06-07 12 views

Répondre

26

Comme déjà suggéré, utilisez yourEnumerable.ToList(). Il énumère à travers votre IEnumerable, en stockant le contenu dans un nouveau List. Vous ne copiez pas nécessairement une liste existante, car votre IEnumerable peut générer les éléments paresseusement.

C'est exactement ce que les autres réponses suggèrent, mais plus clair. Voici le démontage de sorte que vous pouvez être sûr:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    { 
     throw Error.ArgumentNull("source"); 
    } 
    return new List<TSource>(source); 
} 
+0

va-t-il lancer une erreur si IEnumerable n'est pas nul mais vide? –

24

Utilisez la méthode .ToList().

yourEnumerable.ToList(); 
+1

Si non disponible à l'aide System.Linq manque :). Cela devrait être totalement la réponse acceptée ... – CodingYourLife

0

non, vous devez copier, si vous êtes sûr que la référence est la référence à la liste, vous pouvez convertir comme celui-ci

List<int> intsList = enumIntList as List<int>; 
+5

Si vous êtes * sûr * que c'est une référence à une liste, vous devriez utiliser une distribution directe de sorte qu'elle jettera une exception si vous avez tort. Utilisez "as" si vous pensez que * peut * être une liste mais vous n'êtes pas sûr, et les conditions d'erreur ne le sont pas non plus. Ensuite, testez si le résultat est nul. –

+0

Peut-être ajouter un 'if (intsList == null) intsList = nouvelle Liste (enumIntList);' si * peut * être une 'Liste ', déjà, mais il y a des cas où ce n'est pas le cas. – jerryjvl

1

Créer une nouvelle liste et de passer l'ancien IEnumerable à son initialiseur:

IEnumerable<int> enumerable = GetIEnumerable<T>(); 
    List<int> list = new List<int>(enumerable); 
+0

c'est copier la liste aussi .. –

+0

il y aura quand même besoin d'être une copie. – Shimmy

3

Comme d'autres ont suggéré, il suffit d'utiliser la méthode ToList() sur un objet dénombrable:

var myList = myEnumerable.ToList() 

Mais, si votre objet IEnumerable n'a pas la méthode ToList() et vous obtenez une erreur comme ce qui suit:

« IEnumerable » ne contient pas de définition pour « ToList »

vous manque probablement l'espace de noms System.Linq, donc juste ajouter:

using System.Linq 
Questions connexes