• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
works guo

成功的渴望与生俱来---- 成功是获得赞美与尊重的最有效的途径
博客园    首页    新随笔    联系   管理    订阅  订阅

Expression(TDelegate) Generic Class

Expression(TDelegate).Compile Method
Expression(TDelegate) Generic Class

表现一个强类型的lambda expression像树形表达式样形式的数据结构.这个类不能够被继承.

Expression(TDelegate)委托的类型.

注意:

当一个lambda expression被分配一个变量,域,或参数Expression(TDelegate)时.这个编译器发布指令构建一个expression tree.

这里expression tree是一个lambda expression在内存中数据表现形式,表达式树产生透明和清楚的lambda expression的结构.在表达式树中你能想其他数据结构样的与数据相结合.

对待表达式像数据结构样授权接受APIs去接收用户中能在一个自定义管理者中检测,转化和处理的一种格式.例如,在LINQ to SQL数据访问实现使用这种方式灵巧的转化expression trees为按照数据库结构的Transact-SQL声明.

很多标准的查询操作符被定义在Queryable 类中,其中已经有很多Expression(TDelegate)参数类型.

Expression(TDelegate)的NodeType是Lambda.

使用Lambda(TDelegate)(Expression, IEnumerable(ParameterExpression)或 Lambda(TDelegate)(Expression,ParameterExpression[])方法创建一个Expression(TDelegate)对象.

下面代码示范怎样表现一个 lambda expression既执行委过形式的代码和一个expression tree形式的代码.它还演示怎样使用Compile方法转化表达方式树为可执行代码.

// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/**//*  This code produces the following output:

    deleg(4) = True
    deleg2(4) = True
*/


(2)Expression(TDelegate).Compile Method

编译lambda expression按照表达式树描述执行代码.

public TDelegate Compile()

返回值是TDelegate类型.

一个TDelegate类型的委托表示lambda expression按照Expression(TDelegate)描述.

注意:
在运行时编译方法产生一个TDelegate 类型的委托.当这个委托被执行的,它的行为按照Expression(TDelegate)语意来描述.

编译方法能被使用来获得任何表达式树的值.首先创建一个已经有使用Lambda方法的表达式的主体的lambda expression.之后调用编译获得委托,并且执行委托获得expression式的值.

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

/**//*  This code produces the following output:

    deleg(4) = True
*/



posted @ 2008-03-28 18:49  works guo  阅读(925)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3