Szukałem sposobu na przekształcenie każdego elementu IEnumerable w coś innego za pomocą funkcji mapowania (w sposób zgodny z Linq), ale nic nie znalazłem.
Na (bardzo prosty) przykład powinien być w stanie zrobić coś takiego
IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());
Ale nic nie znalazłem. Chodzi mi o to, że napisanie metody rozszerzającej, która to osiąga (w zasadzie wszystko, czego wymaga, to zawinięcie modułu wyliczającego źródła do nowej klasy, a następnie napisanie trochę standardowego kodu do delegowania wywołań do niego), ale spodziewałbym się to jest dość elementarna operacja, a pisanie jej samemu czuje się jak wynalezienie koła na nowo - nie mogę pozbyć się wrażenia, że może istnieć wbudowany sposób, którego powinienem użyć, a po prostu byłem zbyt ślepy, aby zobaczyć to.
Więc ... czy jest coś w Linq, co pozwala mi zrobić to, co opisałem powyżej?
Odpowiedzi:
Możesz po prostu użyć
Select()
metody rozszerzenia:Lub w składni LINQ:
źródło
Select()
nie będzie musiała zostać wykonana, dopóki nie zostanie wyliczona. Nie jest to świetny pomysł, ale mogą wystąpić sytuacje, w których konieczne może być dodanie,ToList()
aby wymusić ocenę całej listy.Szukasz tego,
Select
czego można użyć do przekształcenia \ zaprojektowania sekwencji wejściowej:źródło