lambda表达式是对匿名方法的一种改进,具有更加简洁的语法和更易理解的形式,lambda表达式可以包括表达式和语句,并且可以用与创建委托或表达式目录树类型。
lambda表达式都使用Lambda运算符=>,读作goes to。该Lambda运算符的左边是输入参数,右边包含表达式或者语句块。
Lambda表达式的声明:(参数列表)=>{方法体}
其中的参数列表和普通方法的参数列表相同,Lambda表达式是升级版的匿名方法,如下面语法所示:
1
2
3
|
返回类型 方法名(参数){方法体} //普通方法
delegate
(参数列表) {方法体} //匿名方法
(参数列表)=>{方法体} //
|
几种Lambda表达式形式:
1.(x,y)=>x*y; //多参数,隐式类型=>表达式
2. x=>x*10; //单参数,隐式类型=>表达式
3. x=>{return x*10;}; //单参数,隐式类型=>语句块
4.(int x)=>x*10; //单参数,显式类型=>表达式
5.(int x)=>{return x*10}; //单参数,显式类型=>语句块
6.()=>Console.WriteLine(); //无参数
举个例子:
//求兩個整數最大值 (int x, int y) => { return x > y ? x : y; }; (string text) => { double d; return double.TryParse(text,out d); }; //輸入hello world () => { Console.WriteLine("hello world"); };
看了上面例子,俱你能看出,代码很简节,这些表达式,到是怎么回事呢?
首先我们看下委托
//委托 逛超市 delegate int GuangChaoshi(int a); static void Main(string[] args) { GuangChaoshi gwl = JieZhang; Console.WriteLine(gwl(10) + ""); //打印20,委托的应用 Console.ReadKey(); } //结账 public static int JieZhang(int a) { return a + 10; }
改写成
//委托 逛超市 delegate int GuangChaoshi(int a); static void Main(string[] args) { // GuangChaoshi gwl = JieZhang; GuangChaoshi gwl = p => p + 10; Console.WriteLine(gwl(10) + ""); //打印20,表达式的应用 Console.ReadKey(); }
从上面例子中可以看出Lambda表达式是一种特殊的匿名函数。
复杂的lambda表达式
/// <summary> /// 委托 逛超市 /// </summary> /// <param name="a">花费</param> /// <param name="b">付钱</param> /// <returns>找零</returns> delegate int GuangChaoshi(int a,int b); static void Main(string[] args) { GuangChaoshi gwl = (p, z) => { int zuidixiaofei = 10; if (p < zuidixiaofei) { return 100; } else { return z - p - 10; } }; Console.WriteLine(gwl(10,100) + ""); //打印80,z对应参数b,p对应参数a Console.ReadKey(); }
下面我介绍一个系统指定的Fun<T>委托
T 是参数类型,这是一个泛型类型的委托,用起来很方便的。
例子
static void Main(string[] args) { Func<int, string> gwl = p => p + 10 + "--返回类型为string"; Console.WriteLine(gwl(10) + ""); //打印‘20--返回类型为string’,z对应参数b,p对应参数a Console.ReadKey(); }
说明: 我们可以看到,Func<int,string>表示的是返回一个string类型,并带有int類型參數的函数。
再看一个例子
static void Main(string[] args) { Func<int, int, bool> gwl = (p, j) => { if (p + j == 10) { return true; } return false; }; Console.WriteLine(gwl(5,5) + ""); //打印‘True’,z对应参数b,p对应参数a Console.ReadKey(); }