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
- 1. Come utilizzare l'espressione del generatore CMake $ <TARGET_FILE: tgt>?
- 2. Elenco <int> a IEnumerable <IComparable>
- 3. Casting Elenco popolato <BaseClass> a elenco <ChildClass>
- 4. IEnumerable <> to IList <>
- 5. IEnumerable <IEnumerable <T>> per IEnumerable <T> utilizzando LINQ
- 6. Casting un'attività <T> a un'attività <DerivedT>
- 7. Casting shared_ptr <T> a shared_ptr <void>
- 8. Flatten IEnumerable <IEnumerable <>>; comprensione generici
- 9. Convertire IEnumerable <T> a string []
- 10. C# Impossibile convertire da IEnumerable <Base> a IEnumerable <Derived>
- 11. LINQ unisce Elenco <IEnumerable <T>> in un IEnumerable <T> con qualche regola
- 12. Perché non posso trasmettere un elenco IEnumerable <T> a BindingList <t>?
- 13. Conversione da IEnumerable <IEnumerable <string>> per ICollection <T>
- 14. IEnumerable <string> a stringa
- 15. C# IEnumerable <Object> a stringa
- 16. Trasmetti da IEnumerable a IEnumerable <object>
- 17. Perché IEnumerable <T> è definito come IEnumerable <out T>, non IEnumerable <T>
- 18. Implementare IEnumerable <T> Per un elenco Wrapper
- 19. casting Collection <SomeClass> alla raccolta <SomeSuperClass>
- 20. IEnumerable <T> conversione
- 21. Casting Map <Integer, Set <Object>>
- 22. Lista Casting <x> to List <y>
- 23. ASP.NET MVC 3 Elenco <T> in IEnumerable <SelectListItem>
- 24. Elenco <T> vs IEnumerable <T> in foreach
- 25. Perché una funzione che accetta IEnumerable <interface> non accetta IEnumerable <class>?
- 26. Generazione codice architettura Visual Studio - Crea elenco <type> anziché IEnumerable <type>
- 27. XML per IEnumerable <T>
- 28. Elenco di espressioni <Func <T, TProperty >>
- 29. IEnumerable <T> e IQueryable <T> chiarimenti?
- 30. Come trasmettere l'elenco <object> a Elenco <SomethingElse>
genererà un errore se IEnumerable non è nullo ma vuoto? –