简介
System.Linq.Expressions名称空间包含类、接口和枚举,这些类、接口和枚举支持将语言级别的代码表达式表示为表达式树形式的对象。
注释:
1.抽象类Expression提供用于映射到模型的表达式树类层次结构的根。
2.在此命名空间中,从Expression类派生的类,用于表示表达式树种的节点。Expression类包含static(Shared在Visual Basic中)创建表达式树节点的各种类型的工厂方法。
3.枚举类型ExpressionType指定唯一的节点类型。
序号 | 类 | 描述 |
1 | BinaryExpression | 表示具有二进制运算符的表达式。 |
2 | BlockExpression | 表示包含一个表达式序列的块,表达式中可定义变量。 |
3 | CatchBlock | 表示 try 块中的 catch 语句。 |
4 | ConditionalExpression | 表示包含条件运算符的表达式。 |
5 | ConstantExpression | 表示具有常量值的表达式。 |
6 | DebugInfoExpression | 发出或清除调试信息的序列点。 这使调试器能够在调试时突出显示正确的源代码。 |
7 | DefaultExpression | 表示一个类型或空表达式的默认值。 |
8 | DynamicExpression | 表示一个动态操作。 |
9 | DynamicExpressionVisitor | 表示动态表达式树的访问者或重写者。 |
10 | ElementInit | 表示 IEnumerable 集合的单个元素的初始值设定项。 |
11 | Expression | 提供一种基类,表示表达式树节点的类派生自该基类。 它还包含用来创建各种节点类型的 static (在 Visual Basic 中为 Shared )工厂方法。 这是一个 abstract 类。 |
12 | Expression<TDelegate> | 将强类型化的 Lambda 表达式表示为表达式树形式的数据结构。 此类不能被继承。 |
13 | ExpressionVisitor | 表示表达式树的访问者或重写者 |
14 | GotoExpression | 表示无条件跳转。 这包括返回语句,break 和 continue 语句以及其他跳转。 |
15 | IndexExpression | 表示对一个属性或数组进行索引。 |
16 | InvocationExpression | 表示将委托或 lambda 表达式应用于参数表达式列表的表达式。 |
17 | LabelExpression | 表示一个标签,可以将该标签放置在任何 Expression 上下文中。 如果已跳转到该标签,则它将获取由对应的 GotoExpression 提供的值。 否则,它接收 DefaultValue 中的值。 如果 Type 等于 System.Void,则不应提供值。 |
18 | LabelTarget | 用于表示 GotoExpression 的目标。 |
19 | LambdaExpression | 介绍 lambda 表达式。 它捕获一个类似于 .NET 方法主体的代码块。 |
20 | ListInitExpression | 表示具有集合初始值设定项的构造函数调用。 |
21 | LoopExpression | 表示无限循环。 可通过“中断”退出该循环。 |
22 | MemberAssignment | 表示对象的字段或属性的赋值操作。 |
23 | MemberBinding | 提供表示绑定的类派生自的基类,这些绑定用于对新创建对象的成员进行初始化。 |
24 | MemberExpression | 表示访问字段或属性。 |
25 | MemberInitExpression | 表示调用构造函数并初始化新对象的一个或多个成员。 |
26 | MemberListBinding | 表示初始化新创建对象的一个集合成员的元素。 |
27 | MemberMemberBinding | 表示初始化新创建对象的一个成员的成员。 |
28 | MethodCallExpression | 表示对静态方法或实例方法的调用。 |
29 | NewArrayExpression | 表示创建一个新数组,并可能初始化该新数组的元素。 |
30 | NewExpression | 表示一个构造函数调用。 |
31 | ParameterExpression | 表示一个命名的参数表达式。 |
32 | RuntimeVariablesExpression | 一个为变量提供运行时读/写权限的表达式 |
33 | SwitchCase | 表示 SwitchExpression 的一个事例。 |
34 | SwitchExpression | 表示一个控制表达式,该表达式通过将控制传递到 SwitchCase 来处理多重选择。 |
35 | SymbolDocumentInfo | 存储用于发出源文件调试符号信息所必要的信息,尤其是文件名和唯一的语言标识符。 |
36 | TryExpression | 表示一个 try/catch/finally/fault 块 |
37 | TypeBinaryExpression | 表示表达式和类型之间的操作。 |
38 | UnaryExpression | 表示具有一元运算符的表达式。 |
序号 | 接口 | 描述 |
1 | IArgumentProvider | 提供用于访问多个树节点(DynamicExpression、ElementInit、MethodCallExpression、InvocationExpression、NewExpression 和 InexExpression)的参数的内部接口。 不应使用此 API。 它只会由于 DLL 重构而公开并仅用于内部性能优化。 这能够实现两次优化,从而减少了表达式树的大小。 第一次优化可以使树节点保留在 IList <T> 上而不是 ReadOnlyCollection 上。 IList <T> 可节省为每个节点分配 ReadOnlyCollection 的成本。 第二次优化能够创建专用的子类,可保留特定数量的自变量(例如,Block2、Block3、Block4)。 因此,这些节点避免了分配用于存储其元素的 ReadOnlyCollection 和数组,从而为每个节点节省了 32 个字节。 表达式树节点继续公开 ReadOnlyCollections 的原始 LINQ 属性。 这些节点通过重复使用用于存储数组或元素(通常存储在数组中)的字段来执行此操作。 对于数组用例,集合将类型化为 IList <T>,而不是 ReadOnlyCollection <T>。 当节点在最初构造时它是一个数组。 当编译器访问成员时它会使用此接口。 访问数组元素可以将数组升级到 ReadOnlyCollection。 对于对象用例,我们会存储类型化为对象的字段中的第一个参数。 当最初构造该节点时,该字段将持有该表达式。 编译器通过此接口访问参数,第一个参数的访问器使用 Expression.ReturnObject 返回用于处理表达式或 ReadOnlyCollection 用例的对象。 当用户访问 ReadOnlyCollection 时,将更新对象字段以直接保留 ReadOnlyCollection。 表达式始终返回相同的 ReadOnlyCollection,这一点很重要。 否则,将中断重写树查看器。 从 LINQ v1 返回不同的 ReadOnlyCollections 形成相同的表达式节点,这是一个重大突破。当前用户可以依赖对象标识来区分该节点是否已更改。 在重载字段中存储 ReadOnlyCollection 既可减少内存使用量,又可保持公共 API 兼容性。 |
2 | IDynamicExpression | 提供用于访问 DynamicExpression 树节点的参数及 CallSite 和重写功能的内部接口。 不应使用此 API。 由于 DLL 重构,它只能是公共的;并且仅用于内部性能优化。 |
序号 | 枚举 | 描述 |
1 | ExpressionType | 介绍表达式树节点的节点类型。 |
2 | GotoExpressionKind | 指定此 GotoExpression 表示的跳转种类。 |
3 | MemberBindingType | 描述 MemberInitExpression 对象中使用的绑定类型。 |