简体   繁体   English

C# 中的 F# List.map 等价物?

[英]F# List.map equivalent in C#?

Is there an equivalent to F#'s List.map function in C#? C# 中是否有与 F# 的 List.map 函数等效的功能? ie 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?是否已经有内置方式或者我应该只编写自定义扩展?

That is LINQ's Select - ie那就是 LINQ 的Select - 即

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

or或者

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

ConvertAll is the built-in function: ConvertAll是内置函数:

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

Available since .NET version 2.0.从 .NET 2.0 版开始可用。

MSDN code example: MSDN 代码示例:

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}
 */

为了简化@codeape 所说的:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM