概述
Lambda 表达式,是一种简化的匿名函数,可用于创建委托或表达式目录树。其次,你也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。我们经常在 LINQ 中使用 Lambda 表达式。
Lambda的语法结构如下:
(Input Params) => Expression
- 中间的"=>" 是Lambda的操作符,一般读作"goes to"
- 左边的部分"Input Params"是Lambda表达式的输入参数,当且仅当只有一个参数的时候,括号可以忽略,其他情况哪怕参数个数是0个,也不能忽略.
- 右边的部分"Expression"是语句(Expression)或者代码块(Statement),当且仅当只有一行代码时,大括号可以忽略,其他情况均不可忽略,参考以下样例:
() => Console.WriteLine("No Params") // 0 个参数,左边的圆括号不能省略
x => x * x // 1个参数,左边的圆括号可加可不加
(x, y) => x - y // 2个参数,左边的圆括号不能省略
(x, y) => { x += y; Console.WriteLine(x); } // 大括号不能省略
作用
Lambda 表达式是一个匿名函数,用它可以高效简化代码,常用作委托,回调
Lambda 表达式都使用运算符=>,所以当你见到这个符号,基本上就是一个 Lambda 表达式
Lambda 运算符的左边是输入参数(),=>,右边是表达式或语句块
Lambda 表达式,是可以访问到外部变量的
优势
Lambda表达式是为了简化C#的代码而出现的
Lambda表达式不用定义函数名,直接就是参数列表加函数体,避免了函数对命名空间的污染。下面这个就可以体现出来
lambda是如何简化的?
写一个匿名方法
Func<int, int, string> f1 = delegate (int i, int j) {
return i + j;
};
Console.WriteLine(f1(3,5))
匿名方法可以写成lambda表达式
Func<int, int, string> f2 = (int i, int j) =>{
return i + j;
};
Console.WriteLine(f2(3,5))
可以省略参数数据类型,因为编译器根据委托类型推断出参数类型用=>引出来方法体
Func<int, int, string> f3 = (i, j) =>{
return i + j;
};
Console.WriteLine(f3(3,5))
如果委托没有返回值,且方法体只有一行代码,可省略{}
//Action f5 = () =>{Console.WriteLine("11111");};
Action f5 = () =>Console.WriteLine("11111");
f5();
如果=>之后的方法体中只有一行代码,且方法有返回值,那么可以省略方法体的{}以及return
Func<int, int, string> f6 = (i1, i2) => "i1 + i2";
如果只有一个参数,参数的()可以省略
Action<string> f1 = s => Console.WriteLine(s);
Func<int, bool> f2 = i => i > 5;