Lambda表达式

来源:互联网 发布:白金数据电影网盘 编辑:程序博客网 时间:2024/06/05 02:36

Lambda表达式-表示一个方法的定义

从C#3.0开始,可以使用Lambda表达式代替匿名方法。只要有委托参数类型的地方就可以使用Lambda表达式。刚刚的例子可以修改为

Func<int,int,int>plus = (a,b)=>{ int temp= a+b;return temp; };

intres = plus(34,34);

Console.WriteLine(res);

Lambda运算符=>的左边列出了需要的参数,如果是一个参数可以直接写  a=>(参数名自己定义),如果多个参数就使用括号括起来,参数之间以,间隔

多行语句

1,如果Lambda表达式只有一条语句,在方法快内就不需要花括号和return语句,编译器会自动添加return语句

  Func<double,double> square = x=>x*x;

  添加花括号,return语句和分号是完全合法的

  Func<double,double> square = x=>{

  return x*x;

  }

2,如果Lambda表达式的实现代码中需要多条语句,就必须添加花括号和return语句。

Lambda表达式外部的变量

通过Lambda表达式可以访问Lambda表达式块外部的变量。这是一个非常好的功能,但如果不能正确使用,也会非常危险。示例:

intsomVal = 5;

Func<int,int>f = x=>x+somVal;

Console.WriteLine(f(3));//8

somVal= 7;

Console.WriteLine(f(3));//10

这个方法的结果,不但受到参数的控制,还受到somVal变量的控制,结果不可控,容易出现编程问题,用的时候要谨慎。


[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  
  3.  
  4. */  
  5.   
  6. using System;  
  7. namespace CatCry  
  8. {  
  9.     class MainClass  
  10.     {  
  11.         static int Test1(int arg1, int arg2)  
  12.         {  
  13.             return arg1 + arg2;  
  14.         }  
  15.   
  16.         static void Main()  
  17.         {  
  18.             //Func<int, int, int> plus = Test1;  
  19.             /* 
  20.             // 修改成: 匿名方法  的形式 
  21.             Func<int, int, int> plus = delegate (int arg1, int arg2) 
  22.             { 
  23.                 return arg2 + arg1; 
  24.             }; 
  25.  
  26.             // 匿名方法本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值 
  27.             */  
  28.   
  29.             // Lambda表达式 用来 代替 匿名方法 ,所以一个Lambda表达式也是定一个方法  
  30.             Func<intintint> plus = (arg1, arg2) =>  // Lambda表达式的参数不需要申明类型  
  31.             {  
  32.                 return arg1 + arg2;  
  33.             };  
  34.   
  35.             Func<intint> test2 = a => a + 1;  // Lambda表达式的参数只有一个的时候  
  36.             // 可以不加上括号,当函数体的语句只有一句的时候,我们可以不加上大括号 也可以不加上return语句  
  37.   
  38.             Func<intint> test3 = (a) =>  
  39.             {  
  40.                 return a + 1;  
  41.             };  
  42.   
  43.               
  44.   
  45.             Console.ReadKey();  
  46.         }  
  47.     }  
  48. }  

0 0
原创粉丝点击