С#/Linq: применить функцию сопоставления к каждому элементу в IEnumerable?

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

Для (очень простого) примера он должен иметь возможность делать что-то вроде

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

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

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

Ответ 1

Вы можете использовать метод расширения 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();

Ответ 2

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

IEnumerable<string> strings = integers.Select(i => i.ToString());