C#中的的Lambda表达式本质上与匿名函数的使用别无二差只是声明方式上不再使用delegate关键字。using System; using System.Collections.Generic; namespace lesson14 { class Test { public event Action action; public Test() { int value 10; //内部函数引用了外层函数的变量从而改变了构造函数的生命周期形成了一个闭包 //内层函数可以引用外层函数的变量即使外层函数的声明周期已经终止 action () { Console.WriteLine(value); }; //i的改变并不会与匿名函数同步而是仅表现i的最终值 //故而此处对于i的打印相当于在循环全部结束后为10的时候进行的 //即内层函数对于外层变量的引用使用的时在外层函数范围内该变量的最终值 for (int i 0; i 10; i) { action () { Console.WriteLine(i); }; } } public void DoSomthing() { action(); } } class Program { static void Main(string[] args) { //无参无返回值的Lambda表达式 Action a () { Console.WriteLine(无参无返回值的Lambda表达式); }; a(); //有参数的Lambda表达式 Actionint a1 (int value) { Console.Write(value); }; a1(3); //参数类型可以省略 Actionint a2 (value) { Console.WriteLine(value); }; a2(200); //有返回值的Lambda表达式 Funcstring, int a4 (value) { Console.WriteLine(value); return 1; }; Console.WriteLine(a4(123123)); Test t new Test(); t.DoSomthing(); } } }