J'ai cherché un moyen de transformer chaque élément d'un IEnumerable en quelque chose d'autre en utilisant une fonction de mappage (d'une manière compatible Linq) mais je n'ai rien trouvé.
Pour un exemple (très simple), il devrait être capable de faire quelque chose comme
IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());
Mais je n'ai rien trouvé. Je veux dire, il est assez simple d'écrire une méthode d'extension qui accomplit cela (en gros, tout ce qu'il faut, c'est envelopper l'énumérateur source dans une nouvelle classe, puis écrire un peu de code standard pour lui déléguer les appels), mais je me serais attendu c'est une opération assez élémentaire, et l'écrire moi-même, c'est comme réinventer la roue - je ne peux pas me débarrasser du sentiment qu'il peut y avoir un moyen intégré que je devrais utiliser, et j'ai juste été trop aveugle pour voir il.
Alors ... y a-t-il quelque chose dans Linq qui me permet de faire ce que j'ai décrit ci-dessus?
Réponses:
Vous pouvez simplement utiliser la
Select()
méthode d'extension:Ou dans la syntaxe LINQ:
la source
Select()
ne sera pas nécessairement exécuté tant qu'il ne sera pas énuméré. Ce n'est pas une bonne idée de faire cela, mais il peut y avoir des situations où vous devrez peut-être ajouterToList()
pour le forcer à évaluer la liste entière.Vous recherchez
Select
ce qui peut être utilisé pour transformer \ projeter la séquence d'entrée:la source