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资料

  • 相关阅读:
    [bbk2908]第4集 Chapter 03 介绍RAC的体系结构
    [bbk3011]第8集 Chapter 05 介绍RAC安装过程概述
    [bbk3100]第7集 Chapter 04 介绍RAC中CVU工具的使用
    [bbk2907]第3集 Chapter 02 RAC的安装过程中需要注意的要点
    [bbk2905]第1集 Chapter 01 介绍RAC概述
    [bbk2906]第2集 Chapter 02 介绍RAC概述
    RAC之CRS架构简介
    NOIP普及组2017比赛总结
    struct和typedef
    KMP详解(转)
  • 原文地址:https://www.cnblogs.com/season2009/p/2770112.html
Copyright © 2011-2022 走看看