您的位置:首页 > 编程学习 > ASP.NET > 正文

asp.net lambda表达式

更多 时间:2014-1-2 类别:编程学习 浏览量:2900

asp.net lambda表达式

asp.net lambda表达式

一、lambda运算符

所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。

使用Lambda表达式,当编译器编译时,Lambda表达式同样会被编译成一个匿名方法进行相应的操作,但是与匿名方法相比,Lambda表达式更容易阅读。

比较Lambda表达式和匿名方法,在匿名方法中,"("、")"内是方法的参数的集合,这就对应了Lambda表达式中的"(参数列表)",而匿名方法中"{"、"}"内是方法的语句块,这对应了Lambda表达式中"=>"符号右边的表达式或语句块项。

 

二、lambda表达式语法

Lambda表达式可以有多个参数、一个参数,或者没有参数。

格式:

(参数列表)=>表达式或语句块

 

表现形式为

1.一个参数:param=>expr

2.多个参数:(param-list)=>expr

 

Lambda表达式的格式实例

 

  1. (x, y) => x * y         //多参数,隐式类型=> 表达式 
  2. x => x * 5              //单参数, 隐式类型=>表达式 
  3. x => { return x * 5; }      //单参数,隐式类型=>语句块 
  4. (int x) => x * 5            //单参数,显式类型=>表达式 
  5. (int x) => { return x * 5; }      //单参数,显式类型=>语句块 
  6. () => Console.WriteLine()   //无参数

 

三、Lambda表达式与匿名方法的对比实例

 

1、Sort方法

  •  
  • C# 代码   复制
  • 
       List<int> list=new List<int>();
    
       var numbers = new []{ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    
       list.AddRange(numbers);
    
       list.Sort(delegate (int a, int b)
    
                    {
    
                     return a.CompareTo(b);
    
                    }
    
                );
    
       //use lambda
    
       list.Sort((a,b)=>a.CompareTo(b));
    
    		
  •  

    2、ConvertAll方法

  •  
  • C# 代码   复制
  • 
       List<int> doubleList =list.ConvertAll<int>(delegate (int i)
    
                                                  {
                                                     return i*2;
                                                  });
    
       //use lambda
    
       var doubleList2=list.ConvertAll<int>(i=>i*2);
    
    		
  •  

    3、FindAll方法

  •  
  • C# 代码   复制
  • 
    
    
    
       List<int> lowerThanFiveList =list.FindAll(delegate (int i)
    
                                                  {
                                                    return i<5;
     
                                                  }
    
                                                 );
       //lambda
       var lowerThanFiveList2=list.FindAll(i=>i<5);
    
    		
  •  

    四、Lambda表达式注意事项

     

  • 下列规则适用于 Lambda 表达式中的变量范围:
  •  
  • 1、捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。
  • 2、在外部方法中看不到 Lambda 表达式内引入的变量。
  • 3、Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。
  • 4、Lambda 表达式中的返回语句不会导致封闭方法返回。
  • 5、Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 goto 语句、break 语句或 continue 语句。
  • 6、Lambda表达式的本质是“匿名方法”,即当编译我们的程序代码时,“编译器”会自动将“Lambda表达式”转换为“匿名方法”
  • 7、在 is 或 as 运算符的左侧不允许使用 Lambda。
  • 8、适用于 匿名方法 的所有限制也适用于 Lambda 表达式。
  •  

    标签:lambda表达式
  • 上一篇:Linq中select查询
  • 下一篇:C#泛型List的用法