zoukankan      html  css  js  c++  java
  • λ表达式

    λ表达式是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

  • 相关阅读:
    struct pack unpack
    读书笔记 第四章&第五章
    The Sieve of Eratosthens(爱拉托逊斯筛选法)
    2013年3月百度之星A题
    2013年3月百度之星B题
    好句子
    BFS 与 DFS
    记录本
    HDU 2028 如何计算最小公倍数?
    HDU 2015 偶数求和 解题报告
  • 原文地址:https://www.cnblogs.com/canyudeai008/p/1875035.html
Copyright © 2011-2022 走看看