λ表达式

λ表达式是C#3.0的内容。

    λ表达式用于简化C#编程的某些方面,尤其是与LINQ合并的方面。

    把λ表达式用于匿名方法:

        例:            

        myTimer.Elapsed += (source, e) => Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval ); 

//应用λ表达式。(source, e)参数应用了匿名类型,会根据上下文推到类型。=>把参数列表 和 表达式体分开。

            可以代替内联的匿名方法:

            myTimer.Elapsed += delegate(object source, ElapsedEventArgs e)

{Console.WriteLine("Event handler called after {0} milliseconds.", (source as Timer).Interval );};

            这两段代码会被编译为相同 或 相似 的 MSIL代码。

    λ表达式的参数:

        上面的(source,e)采用了匿名类型。实际上也可以定义类型如: (int paramA , int paramB)=> paramA+ paramB

        但不可以(int paramA, paramB)=>....., 只能要么全部指定类型,要么全部采用匿名类型。 不能混用。

        如果,只有一个参数可以省略(),如: param1 => param1*param1

        还可以,定义 无参数 的λ表达式,使用空括号来表示:() => Math.PI 

    λ表达式的语句体:

         多行表达式时如下:

        (param1, param2)=>

         {

            // 多行表达式

            return returnvalue; //如果有返回类型,可以使用return语句。

         }

         例:

            PerformOperations((int paramA, int paramB)=>param1+param2);

            可以改写为:

            performOperations(delegate(int paramA, int paramB) {return paramA+ paramB;});

            还可改写为:

            performOperations((int paramA, int paramB) => { return paramA+paramB;});

          单一表达式时,使用λ表达式比较简单。多个语句是,建议使用非匿名方法,这便于代码重用。

    λ表达式用做委托 和 表达式树:

        λ表达式有两种解释:

            ·i 解释为 委托 (如上面所描述的一样)

                一般可以把拥有至多4个参数 的表达式 表示为如下 泛型类型:

                    ·Action<>表示 不带 参数, 返回 void

                    ·Action<>表示 至多4个参数, 返回 void

                    ·Func<>表示 至多5个参数,返回非 void类型 。 返回类型放在参数列表最后。

如:Func<int, int, int> 意思是,有两个int参数,返回类型是int。

           ·ii 解释为 表达式树(与LINQ关系密切)

                表达式树 是 λ表达式 的抽象表示,但不能直接执行。可以使用表达式树已编程方式分析λ表达式,执行操作,以响应λ表达式。

                     例:

                        LINQ架构包含一个泛型类Expression<>,用于封装λ表达式。

使用这个类的一种方式是提取C#编写的λ表达式,把它转换为等价的SQL脚本,以便在数据库中直接执行。

     λ表达式 和 集合:

        学习Func<>泛型委托后,理解System.Linq空间中为数组提供的扩展方法。例Aggregate()定义的其中一个版本:

        public static TSource Aggregate <TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func );

        调用:

        int[] myIntArray = {2,6,3};

        int result = myIntArray.Aggregate((param1, param2)=>param1+param2);

//这个表达式会使 λ表达式调用两次(有三个数,先计算2+6,再计算8+3)。最后result=11


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/allovermine/archive/2009/11/24/4862887.aspx

转载于:https://www.cnblogs.com/canyudeai008/archive/2010/11/11/1875035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值