Mar*_*ell 13
Lambda表达式有各种语法选项:
() => ... // no parameters
x => ... // single parameter named x, compiler infers type
(x) => ... // single parameter named x, compiler infers type
(int x) => ... // single parameter named x, explicit type
(x, y) => ... // two parameters, x and y; compiler infers types
(int x, string y) => ... // two parameters, x and y; explicit types
Run Code Online (Sandbox Code Playgroud)
这里的细微之处在于它Where有一个重载接受a Func<T, int, bool>,分别代表值和索引(并返回bool匹配).所以它是Where提供索引的实现 - 类似于:
static class Example
{
public static IEnumerable<T> Where<T>(this IEnumerable<T> source,
Func<T, int, bool> predicate)
{
int index = 0;
foreach (var item in source)
{
if (predicate(item, index++)) yield return item;
}
}
}
Run Code Online (Sandbox Code Playgroud)