一、Lambda表达式简介
Lambda表达式可以理解为匿名函数,可以包含表达式和语句。它提供了一种便利的形式来创建委托。
Lambda表达式使用这个运算符--- “=>”,它读成“goes to” ,该运算符的左边为输入参数,右边是表达式或者语句块。
二、例子
例1:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Windows.Forms; 7 8 namespace Lambda 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 15 //下面是C# 1中创建委托实例的代码 16 Func<string, int> del1 = new Func<string, int>(CallBackMethod); 17 18 //C#2中用匿名方法来创建委托实例,CallBackMethod 19 Func<string, int> del2 = delegate (string text) 20 { 21 return text.Length; 22 }; 23 24 //C# 3中使用Lambda表达式来创建委托实例 25 Func<string, int> del3 = (string text) => text.Length; 26 27 // 可以省略参数类型string,把上面代码再简化为: 28 Func<string, int> del4 = (text) => text.Length; 29 30 // 如果Lambda表达式只需一个参数,并且那个参数可以隐式指定类型时, 31 // 此时可以把圆括号也省略,简化为: 32 Func<string, int> del5 = text => text.Length; 33 34 int length = del5("Test"); 35 Console.WriteLine("Length:" + length); 36 37 Console.ReadKey(); 38 } 39 40 private static int CallBackMethod(string str) 41 { 42 return str.Length; 43 } 44 } 45 }
例2:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Windows.Forms; 7 8 namespace Lambda 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 Button button1 = new Button() { Text = "按钮1", Width = 50, Height = 50, Name = "button1" }; 15 button1.Left = 10; 16 button1.BackColor = System.Drawing.Color.Red; 17 18 Button button2 = new Button() { Text = "按钮二", Width = 50, Height = 50, Left = 70, Name = "button2" }; 19 button2.BackColor = System.Drawing.Color.Green; 20 21 // C# 2中使用匿名方法来订阅事件 22 button1.Click += delegate (object sender, EventArgs e) 23 { 24 ReportEvent("Click事件", sender, e); 25 }; 26 27 28 // C# 3Lambda表达式方式来订阅事件 29 button2.Click += (sender, e) => ReportEvent("Click事件", sender, e); 30 31 32 Form form = new Form { Name = "在控制台中创建的窗体", AutoSize = true }; 33 34 form.Controls.Add(button1); 35 form.Controls.Add(button2); 36 // 运行窗体 37 38 string str = ""; 39 bool isShow = false; 40 while (!isShow) 41 { 42 str = Console.ReadLine(); 43 switch (str) 44 { 45 case "show": 46 isShow = true; 47 Application.Run(form); 48 break; 49 case "quit": 50 Environment.Exit(0); 51 break; 52 53 } 54 } 55 Console.ReadKey(); 56 } 57 // 记录事件的回调方法 58 private static void ReportEvent(string title, object sender, EventArgs e) 59 { 60 Console.WriteLine("事件名称:{0}", title); 61 Console.WriteLine("激发事件的对象:{0}", (sender as Button).Name); 62 Console.WriteLine("事件参数类型: {0}", e.GetType()); 63 Console.WriteLine(); 64 Console.WriteLine(); 65 } 66 } 67 }
运行结果如下: