Je me demandais s'il était possible de transformer un IEnumerable en liste. Y at-il un moyen de le faire autre que de copier chaque élément dans une liste?Casting IEnumerable <T> à la liste <T>
Répondre
Comme déjà suggéré, utilisez yourEnumerable.ToList()
. Il énumère à travers votre IEnumerable
, en stockant le contenu dans un nouveau List
. Vous ne copiez pas nécessairement une liste existante, car votre IEnumerable
peut générer les éléments paresseusement.
C'est exactement ce que les autres réponses suggèrent, mais plus clair. Voici le démontage de sorte que vous pouvez être sûr:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
Utilisez la méthode .ToList().
yourEnumerable.ToList();
Si non disponible à l'aide System.Linq manque :). Cela devrait être totalement la réponse acceptée ... – CodingYourLife
non, vous devez copier, si vous êtes sûr que la référence est la référence à la liste, vous pouvez convertir comme celui-ci
List<int> intsList = enumIntList as List<int>;
Si vous êtes * sûr * que c'est une référence à une liste, vous devriez utiliser une distribution directe de sorte qu'elle jettera une exception si vous avez tort. Utilisez "as" si vous pensez que * peut * être une liste
Peut-être ajouter un 'if (intsList == null) intsList = nouvelle Liste
Créer une nouvelle liste et de passer l'ancien IEnumerable à son initialiseur:
IEnumerable<int> enumerable = GetIEnumerable<T>();
List<int> list = new List<int>(enumerable);
c'est copier la liste aussi .. –
il y aura quand même besoin d'être une copie. – Shimmy
Comme d'autres ont suggéré, il suffit d'utiliser la méthode ToList()
sur un objet dénombrable:
var myList = myEnumerable.ToList()
Mais, si votre objet IEnumerable
n'a pas la méthode ToList()
et vous obtenez une erreur comme ce qui suit:
« IEnumerable » ne contient pas de définition pour « ToList »
vous manque probablement l'espace de noms System.Linq
, donc juste ajouter:
using System.Linq
- 1. Comment puis-je réduire IEnumerable <IEnumerable <Foo>> à IEnumerable <Foo>?
- 2. Cast a reçu objet à une liste <object> ou IEnumerable <object>
- 3. Obtenez un IEnumerable <T> d'un IEnumerable <IEnumerable <T>>
- 4. XML IEnumerable <T>
- 5. EntitySet <IEnumerable <T>> pour IEnumerable <T>
- 6. C# Impossible de convertir IEnumerable <Base> en IEnumerable <Derived>
- 7. Linq où entre IEnumerable et Liste <>
- 8. Quelques problèmes avec l'envoi de la liste <T> comme IEnumerable <T> à une méthode
- 9. C# IEnumerable <Object> à la chaîne
- 10. transformer la liste <XElement> à la liste <XElement.Value>
- 11. Comment IEnumerable <T> .Reverse travail?
- 12. IEnumerable <T> en C#
- 13. Copie d'une liste <BaseClass> à la liste <ClasseDérivée>
- 14. Test pour la liste <T> appartenance à une liste <T>
- 15. Liste <Base> avec Liste <Derived>
- 16. IEnumerable <string> à SelectList, aucune valeur est sélectionnée
- 17. Passage de IList <T> par rapport à IEnumerable <T> avec protobuf-net
- 18. La commande d'articles par longueur dans IEnumerable <T>?
- 19. WPF IEnumerable <T> vs IQueryable <T> comme DataSource
- 20. Pourquoi IList <T> n'a pas les méthodes d'insertion qui prennent IEnumerable <T>?
- 21. Impossible de convertir implicitement le type IEnumerable <T> en IQueryable <T>
- 22. en utilisant Html.EditorFor avec un IEnumerable <T>
- 23. Dictionnaire de liaison WPF <chaîne, Liste <string> à listView, ListBox comment?
- 24. Populate EntitySet de la liste <int>
- 25. comment mettre en place un IEnumerable <IDisposable>
- 26. Fusion de deux IEnumerable <T> s
- 27. Syntaxe pour l'initialisation d'une liste <T> avec la liste existante Objets <T>
- 28. Le moyen le plus rapide de convertir la liste <?> en Liste <ObjectType>
- 29. Trier la liste <DateTime> décroissant
- 30. Comment lancer un IEnumerable <t> ou IQueryable <t> vers un EntitySet <t>?
va-t-il lancer une erreur si IEnumerable n'est pas nul mais vide? –