Ric*_*gan 18 c# generics lambda
我最近一直在忙着研究lambda表达式,并且我有一些特定的功能,我一直想要学习,但似乎无法做出正面或反面.
假设我的代码中有以下逻辑:
List<A> foo; // assuming this is populated
string[] bar = foo.Select<A,string>(x => x.StringProperty).ToArray<string>();
Run Code Online (Sandbox Code Playgroud)
现在,我想将整个操作抽象为一个处理程序方法,以便我可以这样做:
string[] bar = MakeArray<A,string>(foo, x => x.StringProperty);
int[] foobar = MakeArray<A,int>(foo, x => x.IntegerProperty);
Run Code Online (Sandbox Code Playgroud)
如何编写该方法的主体?我预见签名就像:
U[] MakeArray<T,U>( /* some lambda magic? */ ) where T : IEntity {}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何指定我期待一个lambda表达式作为方法参数,以及它如何完全转换为方法的主体.
任何人都可以告诉我如何创建MakeArray()上面的功能?我很确定,一旦我看到它是如何完成的,我就可以从那里拿起它.
编辑
正如评论中指出的那样,MakeArray()需要参考一下IEnumerable<>.更新以反映这一点.
Yur*_*ich 16
public static U[] MakeArray<T, U>(this IEnumerable<T> @enum, Func<T, U> rule)
{
return @enum.Select(rule).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 13
请尝试以下方法
U[] MakeArray<T,U>(Func<T, U> projection) where T : IEntity {
...
}
Run Code Online (Sandbox Code Playgroud)
将lambda作为参数传递时,通常希望匹配参数为委托.在大多数情况下,您应该使用适当的Action<>或Func<>值.前者用于返回lambdas,而后者用于返回值.
| 归档时间: |
|
| 查看次数: |
19664 次 |
| 最近记录: |