web-dev-qa-db-fra.com

Conversion de IEnumerable en liste

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

240
kartal

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

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

using System.Linq;

Ensuite, utilisez la méthode d’extension ToList .

Exemple:

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

Si vous travaillez avec un ancien System.Collections.IEnumerable ancien au lieu de IEnumerable<T>, vous pouvez utiliser enumerable.Cast<object>().ToList().

160
cordialgerm

Si vous utilisez une implémentation de System.Collections.IEnumerable, vous pouvez procéder comme suit pour la convertir en List. Ce qui suit utilise la méthode Enumerable.Cast pour convertir IEnumberable en Generic 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. Puisque 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 la variable IEnumerable est nulle, lorsque vous essayez de la convertir en une variable List, vous obtenez ArgumentNullException en 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 indiqué dans le autre réponse , n'oubliez pas de vérifier null avant de le convertir en List.

19
Nipuna

autrement

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

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

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

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, le cas échéant, crée une liste vide. Cela vous permet de faire un foreach dessus sans avoir à vérifier explicitement la valeur null.

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();
}
5
Craig B