Expression相当于工厂,这个工厂有各式各样的模型(函数),用来生成各种零部件(节点类型),最后组装成表达式树。

Expressions这个命名空间有各种个容器用陈放生产出来的零部件。

Expression 非常接近于类型Emit ,Emit就是直接 使用IL指令进行编程,它的最主要用途就是编译一个动态方法 ,恰好Expression 的主要作用

也是如此 ,可以把Expression编程看作是对Emit的一个简单的基于oo的封装,它们直接针对的更低层语言(IL)的接口,比如 Expression里面

没有while,for foreach,等种种循环,就是一个Expression.Loop(...) 就完了,类似还有Block 这个也有传入传出,和方法相似

列表中每个名字其实对应着一组函数(130个),这些函数函数有些有多重载(330个),但返回值的类型是一样的。

这些工厂方法所生成的表达式的意义应该说还是很直观的,就不特别介绍了。经常跟编译器打交道的话应该对这些名字尤其熟悉。

下一节我们开始使用这些函数创建表达式树节点

函数功能 返回值类型  
Add BinaryExpression  
AddAssign BinaryExpression  
AddAssignChecked BinaryExpression  
AddChecked BinaryExpression  
And BinaryExpression  
AndAlso BinaryExpression  
AndAssign BinaryExpression  
ArrayIndex BinaryExpression  
Assign BinaryExpression  
Coalesce BinaryExpression  
Divide BinaryExpression  
DivideAssign BinaryExpression  
Equal BinaryExpression  
ExclusiveOr BinaryExpression  
ExclusiveOrAssign BinaryExpression  
GreaterThan BinaryExpression  
GreaterThanOrEqual BinaryExpression  
LeftShift BinaryExpression  
LeftShiftAssign BinaryExpression  
LessThan BinaryExpression  
LessThanOrEqual BinaryExpression  
MakeBinary BinaryExpression  
Modulo BinaryExpression  
ModuloAssign BinaryExpression  
Multiply BinaryExpression  
MultiplyAssign BinaryExpression  
MultiplyAssignChecked BinaryExpression  
MultiplyChecked BinaryExpression  
NotEqual BinaryExpression  
Or BinaryExpression  
OrAssign BinaryExpression  
OrElse BinaryExpression  
Power BinaryExpression  
PowerAssign BinaryExpression  
ReferenceEqual BinaryExpression  
ReferenceNotEqual BinaryExpression  
RightShift BinaryExpression  
RightShiftAssign BinaryExpression  
Subtract BinaryExpression  
SubtractAssign BinaryExpression  
SubtractAssignChecked BinaryExpression  
SubtractChecked BinaryExpression  
Block BlockExpression  
TryGetActionType bool  
TryGetFuncType bool  
Catch CatchBlock  
MakeCatchBlock CatchBlock  
Condition ConditionalExpression  
IfThen ConditionalExpression  
IfThenElse ConditionalExpression  
Constant ConstantExpression  
ClearDebugInfo DebugInfoExpression  
DebugInfo DebugInfoExpression  
Default DefaultExpression  
Empty DefaultExpression  
Dynamic DynamicExpression  
MakeDynamic DynamicExpression  
ElementInit ElementInit  
Lambda<TDelegate> Expression<TDelegate>  
Break GotoExpression  
Continue GotoExpression  
Goto GotoExpression  
MakeGoto GotoExpression  
Return GotoExpression  
ArrayAccess IndexExpression  
MakeIndex IndexExpression  
Property IndexExpression  
Invoke InvocationExpression  
Label LabelExpression  
Label LabelTarget  
Lambda LambdaExpression  
ListInit ListInitExpression  
Loop LoopExpression  
Bind MemberAssignment  
Field MemberExpression  
MakeMemberAccess MemberExpression  
Property MemberExpression  
PropertyOrField MemberExpression  
MemberInit MemberInitExpression  
ListBind MemberListBinding  
MemberBind MemberMemberBinding  
ArrayIndex MethodCallExpression  
Call MethodCallExpression  
NewArrayBounds NewArrayExpression  
NewArrayInit NewArrayExpression  
New NewExpression  
Parameter ParameterExpression  
Variable ParameterExpression  
RuntimeVariables RuntimeVariablesExpression
SwitchCase SwitchCase  
Switch SwitchExpression  
SymbolDocument SymbolDocumentInfo  
MakeTry TryExpression  
TryCatch TryExpression  
TryCatchFinally TryExpression  
TryFault TryExpression  
TryFinally TryExpression  
GetActionType Type  
GetDelegateType Type  
GetFuncType Type  
TypeEqual TypeBinaryExpression  
TypeIs TypeBinaryExpression  
ArrayLength UnaryExpression  
Convert UnaryExpression  
ConvertChecked UnaryExpression  
Decrement UnaryExpression  
Increment UnaryExpression  
IsFalse UnaryExpression  
IsTrue UnaryExpression  
MakeUnary UnaryExpression  
Negate UnaryExpression  
NegateChecked UnaryExpression  
Not UnaryExpression  
OnesComplement UnaryExpression  
PostDecrementAssign UnaryExpression  
PostIncrementAssign UnaryExpression  
PreDecrementAssign UnaryExpression  
PreIncrementAssign UnaryExpression  
Quote UnaryExpression  
Rethrow UnaryExpression  
Throw UnaryExpression  
TypeAs UnaryExpression  
UnaryPlus UnaryExpression  
Unbox UnaryExpression  
CanReduce bool  
Reduce Expression  
NodeType ExpressionType  
Type Type  
     

【C#表达式树 四】Expression类上的函数列表的更多相关文章

  1. 深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types

    匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...

  2. 表达式树(Expression Trees)

    [翻译]表达式树(Expression Trees) 原文地址:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/con ...

  3. C# 表达式树(Expression)

    c#中有Expression,即表达式. 通过Expression可以动态构造代码,并编译执行.  比如: 1.  创建参数表达式 :ParameterExpression numParam = Ex ...

  4. 表达式树(Expression Tree)

    你每创建一个表示表达式的实例时,都可以将该类型实例看成是一棵表达式树.每种表示表达式的类型都有一个具体的类型,如Expression的Variable()方法创建的是ParameterExpressi ...

  5. C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较

    在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决. 如题,我总结下来有这么四种方式可以完成这项功能, ...

  6. 表达式树ExpressionTrees

    简介 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.你可以对表达式树中的代码进行编辑和运算.这样能够动态修改可执行代码.在不同数据库 ...

  7. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  8. 关于Expression表达式树的拼接

    最近在做项目中遇到一个问题,需求是这样的: 我要对已经存在的用户进行检索,可以根据用户的id 或者用户名其中的一部分字符来检索出来,这样就出现了三种情况 只有id,只有用户名中一部字符,或者全部都有. ...

  9. 不可不知的表达式树(1)Expression初探

    说起Lambda表达式,大家基本都很熟悉了,而表达式树(Expression Trees),则属于80%的工作中往往都用不到的那种技术,所以即便不是什么新技术,很多人对其理解都并不透彻.此文意图从表达 ...

随机推荐

  1. Centos7下,Docker的安装与使用

    一.Docker Install 1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...

  2. CSS快速入门(三)

    目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...

  3. golang中往脚本传递参数的两种用法os.Args和flag

    1. os.Args package main import ( "fmt" "os" ) func main() { // 执行:./demo.exe 127 ...

  4. java多态成员变量、成员函数(非静态)、静态函数特点

    1 package face_09; 2 3 /* 4 * 多态时, 5 * 成员的特点: 6 * 1,成员变量. 7 * 编译时:参考引用型变量所属类中的是否有调用的成员变量,有,编译通过:没有,编 ...

  5. 简单socket服务器编程

    package socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...

  6. 不难懂-----git一套流程

    001.初始化仓库,创建git仓库 git init 002.配置个人信息 git config --global user.name <名字> --------->:配置用户名 g ...

  7. Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract

    HTTP Status 500 - Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method ...

  8. dp学习(二)

    树和图上的dp. 4. 简单树形dp 这些是最为简单的树形dp. 一般来说,树形dp是通过子树的dp值推出当前点的dp值. 在这里,我们默认当前节点为u,它的儿子节点为v,树的根为rt. 例题4.1 ...

  9. TCP Wrappers

    TCP Wrappers 是 RHEL 7 系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作.换句话说,Linux 系统中其实有两个层面的防火墙,第一 ...

  10. 布客&#183;ApacheCN 编程/后端/大数据/人工智能学习资源 2020.9

    公告 ApacheCN 项目的最终目标:五年内备份并翻译 Github 上的所有教程(其实快被我们啃完了,剩下的不多了). 警告各位培训班:对 ApacheCN 宣传文章的举报,也将视为对 Apach ...