Csharp/C#教程:C#lambda表达式作为函数参数分享


C#lambda表达式作为函数参数

我最近一直在忙着研究lambda表达式,并且我有一些特定的function,我一直想学习,但似乎无法做出正面或反面。

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

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

现在,我想将整个操作抽象为一个处理程序方法,以便我可以这样做:

 string[] bar = MakeArray(foo, x => x.StringProperty); int[] foobar = MakeArray(foo, x => x.IntegerProperty); 

我将如何编写该方法的主体? 我预见签名就像:

 U[] MakeArray( /* some lambda magic? */ ) where T : IEntity {} 

但我不知道如何指定我期望lambda表达式作为方法参数,以及它如何准确转换为方法体。

任何人都可以告诉我如何创建上面的MakeArray()函数? 我很确定,一旦我看到它是如何完成的,我就可以从那里拿起它。

编辑

正如评论中指出的那样, MakeArray()需要对IEnumerable的引用。 更新以反映这一点。

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

请尝试以下方法

 U[] MakeArray(Func projection) where T : IEntity { ... } 

将lambdas作为参数传递时,通常希望匹配参数为委托。 在大多数情况下,您应该使用适当的Action<>Func<>值。 前者用于返回lambdas的void,后者用于返回值的lambdas。

你正在寻找Action<>Func<>

您可以使用Func和Action类。 查看LINQ Where函数的签名示例: http : //msdn.microsoft.com/en-us/library/bb534803.aspx

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1033868.html

(0)
上一篇 2022年1月18日
下一篇 2022年1月18日

精彩推荐