2009-06-07 31 views

risposta

26

Come già suggerito, utilizzare yourEnumerable.ToList(). Enumera attraverso il tuo IEnumerable, memorizzando i contenuti in un nuovo List. Non stai necessariamente copiando un elenco esistente, dato che il tuo IEnumerable potrebbe generare pigramente gli elementi.

Questo è esattamente ciò che suggeriscono le altre risposte, ma più chiaro. Ecco lo smontaggio in modo da poter essere sicuri:

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

genererà un errore se IEnumerable non è nullo ma vuoto? –

24

Utilizzare il metodo .ToList().

yourEnumerable.ToList(); 
+1

Se non disponibile utilizzando System.Linq manca :). Questa dovrebbe essere la risposta accettata ... – CodingYourLife

0

no, è necessario copiare, se si è certi che il riferimento è il riferimento alla lista, è possibile convertire in questo modo

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

Se sei * sicuro * che si tratta di un riferimento a una lista, dovresti usare un cast diretto in modo che genererà un'eccezione se ti sbagli. Usa "come" se pensi che * potrebbe * essere una lista ma non sei sicuro, e nemmeno le condizioni di errore. Quindi verifica se il risultato è nullo. –

+0

Forse aggiungere un 'if (intsList == null) intsList = new List (enumIntList);' se * potrebbe * essere un 'Elenco ', già, ma ci sono alcuni casi in cui non lo è. – jerryjvl

1

Crea una nuova lista e passare il vecchio IEnumerable alla sua inizializzazione:

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

è anche copiare la lista .. –

+0

ci sarà comunque bisogno di essere una copia. – Shimmy

3

Come altri hanno suggerito, è sufficiente utilizzare il metodo ToList() su un oggetto enumerabile:

var myList = myEnumerable.ToList() 

Ma, se l'oggetto IEnumerable non ha il metodo ToList() e che stai ricevendo un errore simile al seguente:

'IEnumerable' non contiene una definizione per 'ToList'

probabilmente stai manca lo spazio dei nomi System.Linq, quindi basta aggiungerlo:

using System.Linq 
Problemi correlati