Lambda表达式(Lambda Expression)是C#中一种特殊语法,它的引入,使得匿名方法更加简单易用,最直接的是在方法体内调用代码或者为委托传入方法体的形式与过程变得更加优雅。
Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作。并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。
它的语法如下:
(Input Param)=>Expression
主要的结构就是 参数 =>(goes to) 代码块
请看如下几种应用情况:
a=>Console.WirteLine(a) //传入参数a,执行向控制台打印a的值(一个参数可以省略括号,如果编译器能根据上下文判断参数类型,那么参数类型就可以省略不写)
int result= (a,b)=>a*b //传入两个参数,返回a*b,此处尽管没有return,是因为如果代码块中只有一句话,系统默认会将此条代码执行并返回执行结果
以上两种情况其实是lambda表达式的正确解读(代码块中只有一条语句),实际上在正常的使用中,我们经常会用lambda表达式去填充委托,一条代码显然不够用,代码块中多于一条的lambda表达式我们称为lambda语句。
请看如下代码:
public static void PrintResult(int a,int ,b,Action<int,int> operations){ ... operations.Invoke(a,b);//Invoke()方法执行委托 ... } PrintResult(2,4,(a,b)=>{ Console.WirteLine(a); Console.WirteLine(b); Console.WirteLine($"a+b={a+b}");//加 }); PrintResult(2,4,(a,b)=>{ Console.WirteLine(a); Console.WirteLine(b); Console.WirteLine($"a*b={a*b}");//乘 });
PrintResult需要三个参数,实际上前两个参数是为operations委托服务的,在PrintResult中我们看到只有一句话,就是执行委托,委托代码块是我们在调用PrintResult的时候声明的,两次调用,表达式内容不同,结果不同,由此可见,得益于委托与lambda表达式的结合,我们不必修改PrintResult代码,就可以实现PrintResult方法代码的个性定制,这种用法十分灵活,若没有lambda表达式,我们在此情景下就要声明方法或者匿名方法等等,他们的效果都不如lambda表达式优雅。