F # List.map 在 C # 中等效吗?

在 C # 中是否有与 F # 的 List.map 函数等价的函数?例如,对列表中的每个元素应用一个函数,并返回一个包含结果的新列表。

比如:

    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);
}

是否已经有一个内置的方式或者我应该只写自定义扩展?

91536 次浏览

That is LINQ's Select - i.e.

var newSequence = originalSequence.Select(x => {translation});

or

var newSequence = from x in originalSequence
select {translation};

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));


Console.WriteLine();
foreach( PointF p in lpf )
{
Console.WriteLine(p);
}


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


Console.WriteLine();
foreach( Point p in lp )
{
Console.WriteLine(p);
}
}


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}


{X=27,Y=32}
{X=99,Y=147}
{X=7,Y=1412}
*/

To simplify what @codeape said:

List<string> result = ListWithAnyObjects.ConvertAll<string>(obj => obj.ToString());