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

  • 相关阅读:
    vim 多窗口编辑
    opengl笔记——旋转,一段代码的理解
    用条件变量实现事件等待器的正确与错误做法
    opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
    Mule与其它web应用服务器的区别
    海量数据相似度计算之simhash短文本查找
    关于协方差矩阵的理解
    C++ STL中的常用容器浅谈
    唐-诗:《枫桥夜泊》
    唐-诗:《肚桑干》
  • 原文地址:https://www.cnblogs.com/season2009/p/2770112.html
Copyright © 2011-2022 走看看