C#中的Lambda表达式
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表达式 Action<int> a1 = (int value) => { Console.Write(value); }; a1(3); //参数类型可以省略 Action<int> a2 = (value) => { Console.WriteLine(value); }; a2(200); //有返回值的Lambda表达式 Func<string, int> a4 = (value) => { Console.WriteLine(value); return 1; }; Console.WriteLine(a4("123123")); Test t = new Test(); t.DoSomthing(); } } }