码迷,mamicode.com
首页 > 其他好文 > 详细

Lambda表达式演变

时间:2015-01-25 20:49:32      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

Lambda表达式是一种匿名函数。
 
演变步骤:
 
一般的方法委托 => 匿名函数委托 => Lambda表达式
 

Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托。


 
委托非常好理解,类似于C++里面的函数指针(指向了一个方法),并且委托约束了待指向方法的签名(由返回类型和参数组成)。
 
首先,定义一个委托如 :
 
delegate int ProcessInt(int i);
 
定义了委托可以像变量一样传递方法。如:
 
 void Sample(ProcessInt pro)

 

这时我们需要写与委托签名一样的方法:
 
         int Double(int i)
         {
             return i * 2;
         }
 
         int Divide(int i)
         {
             return Convert.ToInt32(i / 2);
         }

 

 
对一个很简单的操作,来说,这样重复定义方法很麻烦,不够优雅,.net 2.0 出现了匿名方法,像这样:
 
Sample(delegate(int i) { return i * 2; });  //匿名方法 
 
 
现在好了,要调什么方法,我不用再定义方法了,但是写程序还是要敲很多字符,好,Lambda表达式来了。它是这样写的:
 
Sample(i => i * 2);   //Lambda表达式
 
或者说,这样
 
Sample2((i, k) => i * k);
 

 

 

代码:

执行Test就可以验证结果。  

技术分享
delegate int ProcessInt(int i);
         delegate int Add(int i, int k);
         int Double(int i)
         {
             return i * 2;
         }

         int Divide(int i)
         {
             return Convert.ToInt32(i / 2);
         }

         void Sample(ProcessInt pro)
         {
             int i = 30;
             Console.WriteLine(pro(i));

         }


         void Sample2(Add pro)
         {
             int i = 30;
             int k = 5;
             Console.WriteLine(pro(i,k));

         }


        public void Test()
        {
            Sample(Double);
            Sample(Divide);   //委托
            Sample(delegate(int i) { return i * 2; });  //匿名方法
            Sample(i => i * 2);   //Lambda表达式
            Sample(i => Convert.ToInt32(i / 2));
            Sample2((i, k) => i * k);

        }
View Code

 

Lambda表达式演变

标签:

原文地址:http://www.cnblogs.com/etoah/p/4248684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!