一、Lambda表达式简介
Lambda表达式可以理解为匿名函数,可以包含表达式和语句。它提供了一种便利的形式来创建委托。
Lambda表达式使用这个运算符--- “=>”,它读成“goes to” ,该运算符的左边为输入参数,右边是表达式或者语句块。
二、例子
例1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lambda
{
    class Program
    {
        static void Main(string[] args)
        {
            //下面是C# 1中创建委托实例的代码
            Func<string, int> del1 = new Func<string, int>(CallBackMethod);
            //C#2中用匿名方法来创建委托实例,CallBackMethod
            Func<string, int> del2 = delegate (string text)
            {
                return text.Length;
            };
            //C# 3中使用Lambda表达式来创建委托实例
            Func<string, int> del3 = (string text) => text.Length;
            // 可以省略参数类型string,把上面代码再简化为:
            Func<string, int> del4 = (text) => text.Length;
            // 如果Lambda表达式只需一个参数,并且那个参数可以隐式指定类型时,
            // 此时可以把圆括号也省略,简化为:
            Func<string, int> del5 = text => text.Length;
            int length = del5("Test");
            Console.WriteLine("Length:" + length);
            Console.ReadKey();
        }
        private static int CallBackMethod(string str)
        {
            return str.Length;
        }
    }
}
 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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Lambda
{
    class Program
    {
        static void Main(string[] args)
        {
            Button button1 = new Button() { Text = "按钮1", Width = 50, Height = 50, Name = "button1" };
            button1.Left = 10;
            button1.BackColor = System.Drawing.Color.Red;
            Button button2 = new Button() { Text = "按钮二", Width = 50, Height = 50, Left = 70, Name = "button2" };
            button2.BackColor = System.Drawing.Color.Green;
            // C# 2中使用匿名方法来订阅事件
            button1.Click += delegate (object sender, EventArgs e)
            {
                ReportEvent("Click事件", sender, e);
            };
            // C# 3Lambda表达式方式来订阅事件
            button2.Click += (sender, e) => ReportEvent("Click事件", sender, e);
            Form form = new Form { Name = "在控制台中创建的窗体", AutoSize = true };
            form.Controls.Add(button1);
            form.Controls.Add(button2);
            // 运行窗体
            string str = "";
            bool isShow = false;
            while (!isShow)
            {
                str = Console.ReadLine();
                switch (str)
                {
                    case "show":
                        isShow = true;
                        Application.Run(form);
                        break;
                    case "quit":
                        Environment.Exit(0);
                        break;
                }
            }
            Console.ReadKey();
        }
        // 记录事件的回调方法
        private static void ReportEvent(string title, object sender, EventArgs e)
        {
            Console.WriteLine("事件名称:{0}", title);
            Console.WriteLine("激发事件的对象:{0}", (sender as Button).Name);
            Console.WriteLine("事件参数类型: {0}", e.GetType());
            Console.WriteLine();
            Console.WriteLine();
        }
    }
}
 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 }
运行结果如下:
  
        