.NET教程 Lambda 表达式的简介及形成过程

C#的Lambda表达式是一种"语法糖",使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:

形参列表=>函数体
函数体多于一条语句的可用大括号括起。
要了解 Lambda表达式 ,首先就要了解什么是委托,委托(delegate)是一种引用类型.简单讲,委托就是一个函数指针.先看一个例子
  //声明一个委托
    public delegate int DelegateAdd(int a, int b);
    public class A
    {
        //静态的处理方法
        public static int Add(int a, int b)
        {
            return a + b + 3;;
        }
    }
    //入口类
    public class B
    { 
        public static void Main()
        {
            //实例一个委托
            DelegateAdd mdh = new DelegateAdd(A.Add);
            //调用委托
            int sum = mdh(2, 2);
            Console.WriteLine(sum.ToString());
        }
    }
    上面是一个非常简单的例子,具体的实现步骤:
           1、 先声明个委托实例 ;
           2、然后提供要处理的方法;
           3、再实例化委托(把委托看作是类的话,实例化委托就不难理解了,其参数是要处理的方法,这里的方法 不用加括号,实例化的过程就是装载方法的过程,就好像需要参数的构造函数一样)实例化后的委托 对象 就好比是c++中的指针,它本身就是封装了方法的 对象
           4、最后我们调用委托 对象 就好比是调用了被封装方法本身,调用时的参数也就传给了被封装的方法。
           5、需要注意的是 所声明的委托无论是 参数个数,参数类型,返回值类型 都要和所要封装的方法保持一致,当调用委托实例 对象 时,所传入的参数也要保持一致 ,否则会出现错误。 
    以上实例

IT经典笑语录:有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他说,“你知道不知道这个东西会危害你的健康?我是说,你有没有注意到香烟盒上的那个警告(Warning)?” 小伙子说,“没事儿,我是一个程序员”。 那妇女说,“这又怎样?” 程序员说,“我们从来不关心Warning,只关心Error”

定义了一个A.Add()的方法.但是还有一种方法,就是先不定义,在实例化委托的时候,直接定义一个匿名方法.则以上实例变成了以下代码
    public delegate int DelegateAdd(int a, int b);
    //入口类
    public class B
    { 
        public static void Main()
        {
            //实例一个委托的同时,定义了一个匿名方法
            DelegateAdd mdh = new DelegateAdd(delegate(int a,int b){return a+b+3;});
            //调用委托
            int sum = mdh(2, 2);
            Console.WriteLine(sum.ToString());
        }
    }
    以上方法就是做了一步的改进,使用了匿名方法,就不用在外部在定义方法了.
    进一步的优化以下语句:
DelegateAdd mdh = new DelegateAdd(delegate(int a,int b){return a+b+3;});
    1) 省略了 new DelegateAdd
DelegateAdd mdh = delegate(int a,int b){return a+b+3;};
    2) 省略了关键字 delegate,并加上符号 =>
DelegateAdd mdh = (int a,int b)=>{return a+b+3;};
    3) 省略参数类型
DelegateAdd mdh = (a,b)=>{return a+b+3;};
    4) 省略可以省略的括号,return 等,最终形成 Lambda表达式
DelegateAdd mdh = (a,b)=>a+b+3;
    再举个系统常用的委托:Func<T,TResult>. 如下:
1)new Func<string,int>(delegate(string str){return str.length;})  
2)delegate(string str){return str.length;}
3)(string str)=>{return str.length;}
4)(string str)=>str.length;
5)(str)=>str.length;
6)str=>str.length;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值