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

posted @ 2012-11-14 16:15  Season2009  阅读(218)  评论(0编辑  收藏  举报