0%

lambda Expressions

Expression lambda

使用 lambda 声明运算符 => 从其主体中分离 lambda 参数列表。 若要创建 Lambda 表达式,需要在 Lambda 运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。

任何 Lambda 表达式都可以转换为委托类型。 Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。如果 lambda 表达式不返回值,则可以将其转换为 Action 委托类型之一;否则,可将其转换为 Func 委托类型之一。 例如,有 2 个参数且不返回值的 Lambda 表达式可转换为 Action<T1,T2> 委托。 有 1 个参数且不返回值的 Lambda 表达式可转换为 Func<T,TResult> 委托。 以下示例中,lambda 表达式 x => x * x (指定名为 x 的参数并返回 x 平方值)将分配给委托类型的变量:

1
2
3
4
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));
// Output:
// 25

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。

1
2
3
4
5
6
7
8
9
10
// 使用空括号指定零个输入参数:
Action line = () => Console.WriteLine();

// 括号内的两个或更多输入参数使用逗号加以分隔:
Func<int, int, bool> testForEquality = (x, y) => x == y;

// 有时,编译器无法推断输入类型。 可以显式指定类型,如下面的示例所示:
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

// 输入参数类型必须全部为显式或全部为隐式;

Statement lambda

1
2
3
4
5
6
7
8
9
10
11
(input-parameters) => { <sequence-of-statements> }

Func<int, int, int> func = (x, y)
=>
{
for (int i = 0; i < y; i++)
{
x += i;
}
return x;
};