【C#表达式树 四】Expression类上的函数列表
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类上的函数列表的更多相关文章
- 深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...
- 表达式树(Expression Trees)
[翻译]表达式树(Expression Trees) 原文地址:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/con ...
- C# 表达式树(Expression)
c#中有Expression,即表达式. 通过Expression可以动态构造代码,并编译执行. 比如: 1. 创建参数表达式 :ParameterExpression numParam = Ex ...
- 表达式树(Expression Tree)
你每创建一个表示表达式的实例时,都可以将该类型实例看成是一棵表达式树.每种表示表达式的类型都有一个具体的类型,如Expression的Variable()方法创建的是ParameterExpressi ...
- C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较
在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决. 如题,我总结下来有这么四种方式可以完成这项功能, ...
- 表达式树ExpressionTrees
简介 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.你可以对表达式树中的代码进行编辑和运算.这样能够动态修改可执行代码.在不同数据库 ...
- [C#] C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- 关于Expression表达式树的拼接
最近在做项目中遇到一个问题,需求是这样的: 我要对已经存在的用户进行检索,可以根据用户的id 或者用户名其中的一部分字符来检索出来,这样就出现了三种情况 只有id,只有用户名中一部字符,或者全部都有. ...
- 不可不知的表达式树(1)Expression初探
说起Lambda表达式,大家基本都很熟悉了,而表达式树(Expression Trees),则属于80%的工作中往往都用不到的那种技术,所以即便不是什么新技术,很多人对其理解都并不透彻.此文意图从表达 ...
随机推荐
- vue学习9-更新视图
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta ht ...
- golang中的标准库time
时间类型 time.Time类型表示时间.我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息.示例代码如下: func main() { current := ...
- gin中自定义中间件
package main import ( "github.com/gin-gonic/gin" "log" "time" ) func L ...
- Kubernetes 证书默认1年过期时间修改
使用过的kubeadm搭建K8s集群的朋友知道,默认自动生成的证书有效期只有 1 年,因此需要每年手动更新一次证书,这种形式显然对实际生产环境来说很不友好:因此下面教给大家修改这个过期时间的终极方法. ...
- ORA-15081: failed to submit an I/O operation to a disk
Problem: While restoring controlfile to test environment, from filesystem or tape environment after ...
- makefile 编译多个目标
1.静态库libtools.a源码 libtools.h #ifndef tools_h_ #define tools_h_ int sub(int x,int y); int mul(int x,i ...
- C++ 子函数参数传递过程
编译环境:Visual Studio 2015 参数传递与汇编语言有很大关系.子函数传递参数主要方式有三种(这三种参数传递方式都可用用于x86汇编语言甚至其它汇编语言): 寄存器方式传递参数 存储器方 ...
- 使用VScode编写Markdown的一些使用技巧
- Atcoder ARC-058
ARC058(2020.7.4) A 从高到低依次填入能填的最小值即可. B 首先可以发现这个区间实际上只有横着的一条边有用,那么我们可以在边界上枚举中转点使得不经过非法区域即可. C 挺神的一道题. ...
- 手写简单call,apply,bind
分析一下call的使用方法:call是显示绑定this指向,然后第一个参数是你所指向的this对象,后面跟着多个参数,以逗号隔开 function sum(num1,num2){ return num ...