explained entre diferencia and c# list ienumerable

c# - entre - Conversión de IEnumerable a List



ienumerable c# (5)

En caso de que esté trabajando con un System.Collections.IEnumerable antiguo en lugar de IEnumerable<T> , puede usar enumerable.Cast<object>().ToList()

Esta pregunta ya tiene una respuesta aquí:

Quiero convertir de IEnumerable<Contact> a List<Contact> . ¿Cómo puedo hacer esto?


Puedes hacer esto muy simplemente usando LINQ.

Asegúrese de que este uso esté en la parte superior de su archivo C #:

using System.Linq;

Luego usa el método de extensión ToList .

Ejemplo:

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


Si está utilizando una implementación de System.Collections.IEnumerable , puede hacer lo siguiente para convertirlo en una List . Lo siguiente utiliza el método Enumerable.Cast para convertir IEnumberable en una List genérica.

//ArrayList Implements IEnumerable interface ArrayList _provinces = new System.Collections.ArrayList(); _provinces.Add("Western"); _provinces.Add("Eastern"); List<string> provinces = _provinces.Cast<string>().ToList();

Si está utilizando la versión genérica IEnumerable<T> , la conversión es sencilla. Como ambos son genéricos, puedes hacer lo siguiente:

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

Pero si IEnumerable es nulo, cuando intentes convertirlo en una List , obtendrás ArgumentNullException diciendo que el valor no puede ser nulo.

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

Por lo tanto, como se mencionó en la otra respuesta , recuerde hacer una verificación null antes de convertirla en una List .


Yo uso un método de extensión para esto. Mi método de extensión primero verifica si la enumeración es nula y, si es así, crea una lista vacía. Esto le permite hacer un foreach en él sin tener que verificar explícitamente el valor nulo.

Aquí hay un ejemplo muy artificial:

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

Aquí está el método de extensión:

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


de otra manera

List<int> list=new List<int>(); IEnumerable<int> enumerable =Enumerable.Range(1, 300); foreach (var item in enumerable ) { list.add(item); }