Lamda表达式主要有两种形式:
-
(input-parameters) => expression
-
(input-parameters) => { <sequence-of-statements>
第一种方式会有一个返回值,返回表达式右边的值:
例如:
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));
而第二种形式可以有返回值,也可以没有返回值
Action<string> greet = name =>
{
string greeting = $"Hello {name}!";
Console.WriteLine(greeting);
};
greet("World");
使用 lambda 声明运算符=>
从其主体中分离 lambda 参数列表。 若要创建 Lambda 表达式,需要在 Lambda 运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
任何 Lambda 表达式都可以转换为委托类型。 Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。 如果 lambda 表达式不返回值,则可以将其转换为 Action
委托类型之一;否则,可将其转换为 Func
委托类型之一。 例如,有 2 个参数且不返回值的 Lambda 表达式可转换为 Action<T1,T2> 委托。 有 1 个参数且不返回值的 Lambda 表达式可转换为 Func<T,TResult> 委托.
------------------------------------------------------------------Lamda表达式与Action委托使用-----------------------------------------------------------------------------------
Action line = () => Console.WriteLine();
line
()
如果 lambda 表达式只有一个输入参数,则括号是可选的:如果有多个参数,在括号里用逗号隔开
Action<string,string> line = (x,y) => Console.WriteLine(x+y);
line
("a","b")
------------------------------------------------------------------Lamda表达式与Func委托使用-----------------------------------------------------------------------------------
Func<double, double> cube = x => x * x * x;
如果有多个参数,中间用逗号隔开
Func<double, double,double,double> cube = (x,y,z) => x * y * z;
Func<int, int, bool> testForEquality = (x, y) => x == y;
Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;
------------------------------------------------------------------异步 lambda-----------------------------------------------------------------------------------
通过使用 async 和 await 关键字,你可以轻松创建包含异步处理的 lambda 表达式和语句。 例如,下面的 Windows 窗体示例包含一个调用和等待异步方法 ExampleMethodAsync
的事件处理程序。
一般方法添加事件:
public partial class Form1 : Form { public Form1() { InitializeComponent(); button1.Click += button1_Click; } private async void button1_Click(object sender, EventArgs e) { await ExampleMethodAsync(); textBox1.Text += "\r\nControl returned to Click event handler.\n"; } private async Task ExampleMethodAsync() { // The following line simulates a task-returning asynchronous process. await Task.Delay(1000); } }
lamda表达式添加事件按:
public partial class Form1 : Form { public Form1() { InitializeComponent(); button1.Click += button1_Click; } private async void button1_Click(object sender, EventArgs e) { await ExampleMethodAsync(); textBox1.Text += "\r\nControl returned to Click event handler.\n"; } private async Task ExampleMethodAsync() { // The following line simulates a task-returning asynchronous process. await Task.Delay(1000); } }