Je veux convertir de IEnumerable<Contact>
en List<Contact>
. Comment puis-je faire ceci?
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();
Si vous travaillez avec un ancien System.Collections.IEnumerable
ancien au lieu de IEnumerable<T>
, vous pouvez utiliser enumerable.Cast<object>().ToList()
.
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();
Par conséquent, comme indiqué dans le autre réponse , n'oubliez pas de vérifier null
avant de le convertir en List
.
autrement
List<int> list=new List<int>();
IEnumerable<int> enumerable =Enumerable.Range(1, 300);
foreach (var item in enumerable )
{
list.add(item);
}
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();
}