C#-Lambda表达式和匿名函数

表达式lambda

表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 lambda 会返回表达式的结果,并采用以下基本形式:

1
(input-parameters) => expression

举个例子,我想写一个可计算参数平方值的委托,那么使用 lambda 表达式实现如下。

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

可以发现func中只有一个语句,如果需要更多语句,可以使用到 语句lambda

语句lambada

语句 lambda 与表达式 lambda 类似,只是语句括在大括号中:

1
(input-parameters) => { <sequence-of-statements> }

语句 lambda 的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个。

1
2
3
4
5
6
7
8
Action<string> greet = name =>
{
string greeting = $"Hello {name}!";
Console.WriteLine(greeting);
};
greet("World");
// Output:
// Hello World!

lambda 表达式的输入参数

将 lambda 表达式的输入参数括在=>运算符左边的括号中。 使用空括号指定零个输入参数:

1
Action line = () => Console.WriteLine();

如果 lambada 表达式只有一个参数,则括号是可选的:

1
Func<double, double> cube = x => x * x * x;

当有两个或更多输出参数,需要使用逗号加以分割:

1
Func<int, int, bool> testForEquality = (x, y) => x == y;

当编译器无法判断输出参数的类型,你需要 显示指定 类型。例如,当拥有两个不同类型的参数时,你需要指定参数名。

1
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

Tips:如果还不知道Action、Func的用法,你需要去补习 C#委托 的知识,这里不再赘述。

参考资料

Lambda 表达式和匿名函数 - C# | Microsoft Learn