1、C# lambda表达式
"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>
,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。可以将此表达式分配给委托类型。
例如,
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { delegate int Calc(int i); class Program { static void Main(string[] args) { Calc myDelegate = x => x * x+100; int j = myDelegate(5); Console.WriteLine(j); } } }
注意:
Lambda表达式Lambda表达式是由.NET 2.0演化而来的,也是LINQ的基础,熟练地掌握Lambda表达式能够快速地上手LINQ应用开发。
Lambda表达式在一定程度上就是匿名方法的另一种表现形式。
2、语法
简单的lambda表达式包含一个参数和一个表达式:
parameter => expression
要使用多个参数,需要将其括在括号中:
(parameter1, parameter2) -> expression
表达式是有限的。它们必须立即返回一个值,并且不能包含 变量,赋值或语句,例如,if或for。为了执行更复杂的操作,可以将代码块与花括号一起使用。如果lambda表达式需要返回一个值,则代码块需要有return
语句返回值。
(parameter1, parameter2) -> { 代码 }
3、使用lambda表达式
lambda表达式通常作为参数传递给函数:
例如:
在List<string>
的ForEach
方法中,使用lamba
表达式可打印输出列表中的每个元素:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { delegate int Calc(int i); class Program { static void Main(string[] args) { var colNames = new List<string> { "colE", "colL", "colO", "colN" }; colNames.ForEach((x) => Console.WriteLine(x)); } } }
要在方法中使用lambda表达式,该方法应具有一个带有单方法委托类型的参数。 调用接口的方法将运行lambda表达式:
例如,
创建一个将lambda表达式作为参数的方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { delegate int Calc(int i); class Program { public static int GetResult(Calc c,int i) { return c(i); } static void Main(string[] args) { Console.WriteLine(GetResult(x=>x*3+20,10)); } } }