Tenho procurado uma maneira de transformar cada elemento de um IEnumerable em outra coisa usando uma função de mapeamento (de uma forma compatível com o Linq), mas não encontrei nada.
Para um exemplo (muito simples), ele deve ser capaz de fazer algo como
IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());
Mas não encontrei nada. Quero dizer, é muito simples escrever um método de extensão que faça isso (basicamente, tudo o que requer é agrupar o enumerador de origem em uma nova classe e, em seguida, escrever um pouco de código clichê para delegar as chamadas a ele), mas eu esperava esta é uma operação bastante elementar, e escrevê-la por mim mesmo parece reinventar a roda - não consigo evitar a sensação de que pode haver uma maneira embutida que eu deveria estar usando, e estou cego demais para ver isto.
Então ... há algo no Linq que me permite fazer o que descrevi acima?
Respostas:
Você pode apenas usar o
Select()
método de extensão:Ou na sintaxe do LINQ:
fonte
Select()
não será necessariamente executado até que seja enumerado. Não que seja uma ótima ideia fazer isso, mas pode haver algumas situações em que você pode precisar adicionarToList()
para forçá-lo a avaliar a lista inteira.Você está procurando
Select
qual pode ser usado para transformar \ projetar a sequência de entrada:fonte