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

行路难,行路难,多歧路,今安在。

长风破浪会有时,直挂云帆济沧海。

博客园    首页    新随笔       管理     

学习记录。(4.6)表达式树,泛型

1.表达式树

http://www.cnblogs.com/JeffreyZhao/archive/2009/07/29/expression-tree-fast-evaluation.html

 

(1)逻辑即数据,Linq to everything

.NET 3.5中新增的表达式树(Expression Tree)特性,第一次在.NET平台中引入了“逻辑即数据”的概念。也就是说,我们可以在代码里使用高级语言的形式编写一段逻辑,但是这段逻辑最终会被保存为数据。正因为如此,我们可以使用各种不同的方法对它进行处理。例如,您可以将其转化为一个SQL查询,或者外部服务调用等等,这便是LINQ to Everything在技术实现上的重要基石之一。

 

2.泛型的一个问题。

http://www.cnblogs.com/JeffreyZhao/archive/2009/09/08/i-made-a-mistake-can-you-figure-it-out-answer.html

 

(1)在泛型类中定义静态字段的时候一定要注意:不同泛型参数生成的具体类(无论是值类型还是引用类型),它们的静态字段是独立的。

 

 

3. 表达式树开发人员指南。

ms-help://MS.MSDNQTR.v90.chs/dv_fxadvance/html/fb1d3ed8-d5b0-4211-a71f-dd271529294b.htm

 

System.Linq.Expressions:提供了用于手动生成表达式树的API

Expression 以表达式目录树的形式,把强类型lambda表达式表示为数据结构.提供大量静态工厂。

表达式树的根节点为,Expression<TDelegate> 表示一个lambda表达式。

并且可以自动把这个lambda表达式分解为表达式目录树,存储起来。

????????????????????

1.Express可以不表示Lambda,那表达的是什么?

 

 

Lambda表达式定义。

 

2.lambda表示匿名函数。,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型

2.Lambda 语句无法用于创建表达式目录树。

Lambda 的一般规则如下:

  • Lambda 包含的参数数量必须与委托类型包含的参数数量相同。

  • Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。

  • Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。

请注意,Lambda 表达式本身没有类型,因为通用类型系统没有“Lambda 表达式”这一内部概念。但是,有时会不正式地论及 Lambda 表达式的“类型”。在这些情况下,类型是指委托类型或 Lambda 表达式所转换为的 Expression 类型。

 

 

构建表达式树。

 

只能执行表示 lambda 表达式的表达式目录树。表示 lambda 表达式的表达式目录树属于 LambdaExpression 或 Expression<(Of <(TDelegate>)>) 类型。若要执行这些表达式目录树,需要调用 Compile 方法来创建一个可执行委托,然后调用该委托。

(0)通过expression的静态方法,构建出Expression<TDelegate>。

(1)调用compile,创建一个可执行的委托。

posted @ 2010-04-07 15:43  Young跑跑  阅读(364)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3