2009-06-07 9 views

Respuesta

26

Como ya se ha sugerido, use yourEnumerable.ToList(). Se enumera a través de su IEnumerable, almacenando los contenidos en un nuevo List. No necesariamente está copiando una lista existente, ya que su IEnumerable puede estar generando los elementos de forma perezosa.

Esto es exactamente lo que sugieren las otras respuestas, pero es más claro. Aquí está el desmontaje por lo que puede estar seguro:

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) 
{ 
    if (source == null) 
    { 
     throw Error.ArgumentNull("source"); 
    } 
    return new List<TSource>(source); 
} 
+0

¿arrojará un error si IEnumerable no es nulo pero está vacío? –

24

Utilice el método .ToList().

yourEnumerable.ToList(); 
+1

Si no está disponible utilizando System.Linq falta :). Esta debería ser totalmente la respuesta aceptada ... – CodingYourLife

0

no, usted debe copiar, si está seguro de que la referencia se hace referencia a la lista, puede convertir como esto

List<int> intsList = enumIntList as List<int>; 
+5

Si está * seguro * de que es una referencia a una lista, debe usar un reparto directo para que arroje una excepción si está equivocado. Use "como" si cree que * podría * ser una Lista pero no está seguro, y tampoco lo son las condiciones de error. Luego prueba si el resultado es nulo. –

+0

Quizás agregue un 'if (intsList == null) intsList = new List (enumIntList);' si * podría * ser una 'Lista ', ya existe, pero hay algunos casos en los que no lo es. – jerryjvl

1

crear una nueva lista y pasar la edad IEnumerable a su inicializador:

IEnumerable<int> enumerable = GetIEnumerable<T>(); 
    List<int> list = new List<int>(enumerable); 
+0

también copia la lista. –

+0

de todos modos tendrá que haber una copia. – Shimmy

3

Como otros sugirieron, basta con utilizar el método ToList() en un objeto enumerable:

var myList = myEnumerable.ToList() 

Pero, si su objeto IEnumerable no tiene el método ToList() y que está recibiendo un error como el siguiente:

'IEnumerable' no contiene una definición para 'ToList'

es probable que se está perdiendo el espacio de nombres System.Linq, por lo que sólo agregarlo:

using System.Linq 
Cuestiones relacionadas