Mi chiedevo se è possibile trasmettere un oggetto IEnumerable a un elenco. C'è un modo per farlo oltre a copiare ogni elemento in una lista?Casting IEnumerable <T> a Elenco <T>
risposta
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);
}
Utilizzare il metodo .ToList().
yourEnumerable.ToList();
Se non disponibile utilizzando System.Linq manca :). Questa dovrebbe essere la risposta accettata ... – CodingYourLife
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>;
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
Forse aggiungere un 'if (intsList == null) intsList = new List
Crea una nuova lista e passare il vecchio IEnumerable alla sua inizializzazione:
IEnumerable<int> enumerable = GetIEnumerable<T>();
List<int> list = new List<int>(enumerable);
è anche copiare la lista .. –
ci sarà comunque bisogno di essere una copia. – Shimmy
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
genererà un errore se IEnumerable non è nullo ma vuoto? –