319 votes

Conversion de IEnumerable en liste

Je veux convertir de IEnumerable<Contact> a List<Contact> . Comment puis-je faire ?

529voto

vcsjones Points 51910

Vous pouvez le faire très simplement en utilisant LINQ.

Assurez-vous que cette utilisation se trouve en haut de votre fichier C# :

using System.Linq;

Utilisez ensuite le ToList méthode d'extension.

Exemple :

IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();

48 votes

Il est important de noter que votre solution fonctionne pour la version générique de l'application IEnumerable . La réponse de l'utilisateur pickles ci-dessous traite de la version non-générique.

13 votes

Merci pour "using System.Linq ;"

5 votes

Merci @mkmurray Je dois faire très attention pour trouver les "cornichons" :D

212voto

pickles Points 4235

Dans le cas où vous travaillez avec une bonne vieille System.Collections.IEnumerable au lieu de IEnumerable<T> vous pouvez utiliser enumerable.Cast<object>().ToList()

0 votes

J'adore ça. Merci!<3

22voto

Nips Points 772

Si vous utilisez une implémentation de System.Collections.IEnumerable vous pouvez faire comme suit pour le convertir en un List . Les utilisations suivantes Enumerable.Cast pour convertir IEnumberable à un générique List .

//ArrayList Implements IEnumerable interface
ArrayList _provinces = new System.Collections.ArrayList();
_provinces.Add("Western");
_provinces.Add("Eastern");

List<string> provinces = _provinces.Cast<string>().ToList();

Si vous utilisez la version générique IEnumerable<T> La conversion est simple. Comme les deux sont des génériques, vous pouvez faire comme ci-dessous,

IEnumerable<int> values = Enumerable.Range(1, 10);
List<int> valueList = values.ToList();

Mais si le IEnumerable est nulle, lorsque vous essayez de la convertir en un fichier de type List vous obtiendrez ArgumentNullException disant que la valeur ne peut pas être nulle.

IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();

enter image description here

Par conséquent, comme mentionné dans le autre réponse n'oubliez pas de faire un null avant de le convertir en un List .

7voto

Une autre façon

List<int> list=new List<int>();

IEnumerable<int> enumerable =Enumerable.Range(1, 300);  

foreach (var item in enumerable )  
{     
  list.add(item);  
}

5voto

Craig B Points 98

J'utilise une méthode d'extension pour cela. Ma méthode d'extension vérifie d'abord si l'énumération est nulle et, si c'est le cas, crée une liste vide. Cela vous permet de faire un foreach sur cette liste sans avoir à vérifier explicitement si elle est nulle.

Voici un exemple très artificiel :

IEnumerable<string> stringEnumerable = null;
StringBuilder csv = new StringBuilder();
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(","));

Voici la méthode d'extension :

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj)
{
    return obj == null ? new List<T>() : obj.ToList();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X