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í:
- Casting IEnumerable <T> a la lista <T> 5 respuestas
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);
}