C#lambda表达式作为函数参数最近一直在忙研究lambda表达式,有一些具体的函数一直想学,但是好像不能出头或者尾巴。假设我的代码中有以下逻辑:Listfoo;//假设这是填充的string[]bar=foo.Select(x=>x.StringProperty).ToArray();现在,我想将整个操作抽象为一个单一的过程过程方法,以便我可以这样做:string[]bar=MakeArray(foo,x=>x.StringProperty);int[]foobar=MakeArray(foo,x=>x.IntegerProperty);我将如何编写方法主体?我预见到这样的签名:U[]MakeArray(/*somelambdamagic?*/)whereT:IEntity{}但我不知道如何指定我希望将lambda表达式作为方法参数,以及它究竟如何转换为方法体。谁能告诉我如何创建上面的MakeArray()函数?一旦我看到它是如何完成的,我很确定我可以从那里拿起它。编辑正如评论中所指出的,MakeArray()需要对IEnumerable的引用。更新以反映这一点。publicstaticU[]MakeArray(thisIEnumerable@enum,Funcrule){return@enum.Select(rule).ToArray();}请尝试以下方法U[]MakeArray(Funcprojection)whereT:IEntity{...}当将lambda作为参数传递时,您通常希望将参数匹配为委托。在大多数情况下,您应该使用适当的Action或Func值。前者用于void返回lambda,后者用于lambda返回值。您正在寻找Action和Func。您可以使用Func和Action类。请参阅LINQWhere函数的签名示例:http://msdn.microsoft.com/en-us/library/bb534803.aspx您可以创建扩展publicstaticclassMakeArrayExtension{publicstaticU[]MakeArray(thisIEnumerable集合,Funcfunc){returncollection.Select(func).ToArray();}}然后像这样使用更多关于C#的学习教程,希望大家多多关注—Listfoo;//假设这是填充的string[]bar=foo.MakeArray(x=>x.StringProperty);本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
