F# List.map equivalent in C#?


ConvertAll is the built-in function:

public List<TOutput> ConvertAll<TOutput>(
    Converter<T, TOutput> converter

Available since .NET version 2.0.

MSDN code example:

using System;
using System.Drawing;
using System.Collections.Generic;

public class Example
    public static void Main()
        List<PointF> lpf = new List<PointF>();

        lpf.Add(new PointF(27.8F, 32.62F));
        lpf.Add(new PointF(99.3F, 147.273F));
        lpf.Add(new PointF(7.5F, 1412.2F));

        foreach( PointF p in lpf )

        List<Point> lp = lpf.ConvertAll( 
            new Converter<PointF, Point>(PointFToPoint));

        foreach( Point p in lp )

    public static Point PointFToPoint(PointF pf)
        return new Point(((int) pf.X), ((int) pf.Y));

/* This code example produces the following output:

{X=27.8, Y=32.62}
{X=99.3, Y=147.273}
{X=7.5, Y=1412.2}


Is there an equivalent to F#'s List.map function in C#? i.e. apply a function to each element in the list and return a new list containing the results.

Something like:

    public static IEnumerable<TResult> Map<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> funky)
        foreach (TSource element in source)
            yield return funky.Invoke(element);

Is there already a built in way or should I just write the custom extension?