C # / Linq: Применить функцию сопоставления для каждого элемента в IEnumerable? - PullRequest
89 голосов
/ 25 августа 2011

Я искал способ преобразовать каждый элемент IEnumerable во что-то еще, используя функцию отображения (совместимым с Linq), но я ничего не нашел.

Для (очень простой пример, он должен быть в состоянии сделать что-то вроде

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());

Но я ничего не нашел.Я имею в виду, что довольно просто написать метод расширения, который выполняет это (в основном, все, что для этого требуется, - это обернуть перечислитель исходного кода в новый класс, а затем написать немного стандартного кода для делегирования вызовов ему), но я бы ожидалэто довольно элементарная операция, и писать ее самому - все равно что заново изобретать колесо - я не могу избавиться от ощущения, что может быть встроенный способ, которым я должен пользоваться, и я просто был слишком слеп, чтобы видетьэто.

Итак ... в Linq есть что-то, что позволяет мне делать то, что я описал выше?

Ответы [ 2 ]

142 голосов
/ 25 августа 2011

Вы можете просто использовать метод расширения Select():

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());

Или в синтаксисе LINQ:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };

var strings = from i in integers
              select i.ToString();
24 голосов
/ 25 августа 2011

Вы ищете Select, который можно использовать для преобразования \ проецирования входной последовательности:

IEnumerable<string> strings = integers.Select(i => i.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...