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. Activity Fragment Service生命周期图

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  2. mac下复制文件路径

    快捷键: option+command+C

  3. ping: Network is unreachable

    问题 [root@web-1 yum.repos.d]# ping baidu.com ping: unknown host baidu.com [root@web-1 yum.repos.d]# p ...

  4. 使用jQuery所需添加的头文件

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 在html文件中输入 ...

  5. 字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路

    点这里申请 本文主要介绍Heimdallr对卡死.卡顿异常的监控原理,并结合长时间的业务沉淀发现的问题进行不断迭代和优化,逐步实现全面.稳定.可靠的历程. 作者:字节跳动终端技术--白昆仑 前言 卡死 ...

  6. alpakka-kafka(9)-kafka在分布式运算中的应用

    kafka具备的分布式.高吞吐.高可用特性,以及所提供的各种消息消费模式可以保证在一个多节点集群环境里消息被消费的安全性:即防止每条消息遗漏处理或重复消费.特别是exactly-once消费策略:可以 ...

  7. JVM之栈、堆、方法区(三)

    一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...

  8. Lesson6——Pandas Pandas描述性统计

    1 简介 描述统计学(descriptive statistics)是一门统计学领域的学科,主要研究如何取得反映客观现象的数据,并以图表形式对所搜集的数据进行处理和显示,最终对数据的规律.特征做出综合 ...

  9. Java Thread.currentThread()和This的区别

    感谢原文作者:王婷婷-Smily 原文链接:https://blog.csdn.net/dfshsdr/article/details/92760135 缘由 很多人认为多线程中的Thread.cur ...

  10. Java线程--Semaphore使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11872132.html Java线程--Semaphore使用 Semaphore是信号量, ...