最近,我一直在忙于研究lambda表达式,我一直在学习一些特定的功能,但似乎并没有发挥任何作用。

假设我的代码中包含以下逻辑:

List<A> foo; // assuming this is populated
string[] bar = foo.Select<A,string>(x => x.StringProperty).ToArray<string>();

现在,我可能想将整个操作抽象为处理程序方法,以便可以代替执行此操作:
string[] bar = MakeArray<A,string>(foo, x => x.StringProperty);
int[] foobar = MakeArray<A,int>(foo, x => x.IntegerProperty);

我将如何编写该方法的正文?我预见到将签名声明为:
U[] MakeArray<T,U>( /* some lambda magic? */ ) where T : IEntity {}

但我不知道如何指定我希望将lambda表达式用作方法参数,以及如何将其精确转换为方法的主体。

有人可以教我如何创建上面的MakeArray()函数吗?我非常确定,一旦我看到它的完成方式,就可以从那里拿起它。

编辑

如评论中所指出,MakeArray()需要对IEnumerable<>的引用。更新以反射(reflect)这一点。

最佳答案

public static U[] MakeArray<T, U>(this IEnumerable<T> @enum, Func<T, U> rule)
{
    return @enum.Select(rule).ToArray();
}

关于c# - C#lambda表达式作为函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5396746/

10-13 08:27