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

    定义:

    Lambda表达式是一个匿名函数,可以包含表达式和语句,可以用来创建委托或expression tree。

    所有Lambda表达式者采用用lambda操作符=>(读做“goes to”),左边表示输入参数,右边为表达式或语句块。

    用法

    1,创建委托 

    delegate int del(int i);
    static void Main(string[] args)
    {
        del myDelegate = x => x * x;
        int j = myDelegate(5); //j = 25
    }

     2, 创建expression tree类型

    using System.Linq.Expressions;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Expression<del> myET = x => x * x;
            }
        }
    }

    Expression Lambdas

    右边为括表达式的Lambda表达式称为“表达式lambda”。这个有点绕,MSDN原文如下:

    A lambda expression with an expression on the right side is called an expression lambda.

    下面是一些expression lambda示例

    (x, y) => x == y
    (int x, string s) => s.Length > x
    () => SomeMethod()
    x => x + 1 //只有当参数为一个时,()才可以省略

    Statement Lambdas

    与“表达式lambda”类似,只不过多了一个{};

    (input parameters) => {statement;}

    实例分析

    builder.Register(ctx => RouteTable.Routes).SingleInstance()
    //Register定义 public static IRegistrationBuilder<T, SimpleActivatorData, SingleRegistrationStyle> Register<T>(this ContainerBuilder builder, Func<IComponentContext, T> @delegate);
    注:builder = new ContainerBuilder(); 
    注:代码截取自Orchard Global.asax.cs

    初看有点犯晕,ctx在这起什么作用?这段代码应如何理解?下面是我的理解。

    ctx在此完全是因为IRegistrationBuilder中定义的 Func<IComponentContext, T>必须要有一个输入参数,在右边的Lambda表达式(RouteTable.Routes)中并没有用到这个参数。代码的意思就是把Routes注册到容器中。

    MSDN关于Lambda资料

  • 相关阅读:
    linux find命令
    busybox的使用
    sql server的数据库个数、表个数及表的数据量统计
    SQL Server查看所有表大小,所占空间
    oracle数据库审计
    oracle --审计
    oracle 增量导出/导入
    MySQL下做Master/Slave同步,延迟太大怎么办?
    【MongoDB】2、安装MongoDB 2.6.1 on Unbuntu 14.04(学习流水账)
    mongodb shell之使用js(二)
  • 原文地址:https://www.cnblogs.com/season2009/p/2770112.html
Copyright © 2011-2022 走看看