Expression<TDelegate> 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将强类型化的 Lambda 表达式表示为表达式树形式的数据结构。 此类不能被继承。
generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression
类型参数
- TDelegate
Expression<TDelegate> 表示的委托的类型。
- 继承
示例
下面的代码示例演示如何将 lambda 表达式表示为委托形式的可执行代码,以表达式树的形式表示为数据。 它还演示了如何使用 方法将表达式树重新转换为可执行代码 Compile 。
// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));
// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));
/* This code produces the following output:
deleg(4) = True
deleg2(4) = True
*/
' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))
' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))
' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True
注解
将 lambda 表达式分配给类型为 Expression<TDelegate>的变量、字段或参数时,编译器会发出生成表达式树的指令。
注意
如果存在从 lambda 表达式到类型 Expression<D>
委托的转换,则存在从 lambda 表达式到类型 (Expression(Of D)
visual Basic 中的转换 D
) 。 但是,转换可能会失败,例如,如果 lambda 表达式的主体是块。 这意味着委托树和表达式树在重载解析方面的行为类似。
表达式树是 lambda 表达式的内存中数据表示形式。 表达式树使 lambda 表达式的结构透明和显式。 可以与表达式树中的数据进行交互,就像与任何其他数据结构交互一样。
将表达式视为数据结构的功能使 API 能够以可以自定义方式检查、转换和处理的格式接收用户代码。 例如,LINQ to SQL 数据访问实现使用此工具将表达式树转换为可由数据库计算的 Transact-SQL 语句。
类中 Queryable 定义的许多标准查询运算符都有一个或多个类型的 Expression<TDelegate>参数。
NodeType的 Expression<TDelegate> 为 Lambda。
Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)使用 或 Lambda<TDelegate>(Expression, ParameterExpression[]) 方法创建 Expression<TDelegate> 对象。
属性
Body |
获取 lambda 表达式的主体。 (继承自 LambdaExpression) |
CanReduce |
指示可将节点简化为更简单的节点。 如果返回 true,则可以调用 Reduce() 以生成简化形式。 (继承自 Expression) |
Name |
获取 lambda 表达式的名称。 (继承自 LambdaExpression) |
NodeType |
返回此 Expression 的节点类型。 (继承自 LambdaExpression) |
Parameters |
获取 lambda 表达式的参数。 (继承自 LambdaExpression) |
ReturnType |
获取 lambda 表达式的返回类型。 (继承自 LambdaExpression) |
TailCall |
获取一个值,该值指示是否将通过尾调用优化来编译 lambda 表达式。 (继承自 LambdaExpression) |
Type |
获取此 Expression 表示的表达式的静态类型。 (继承自 LambdaExpression) |
方法
Accept(ExpressionVisitor) |
调度到此节点类型的特定 Visit 方法。 例如,MethodCallExpression 调用 VisitMethodCall(MethodCallExpression)。 (继承自 Expression) |
Compile() |
将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示 lambda 表达式的委托。 |
Compile(Boolean) |
将表达式树描述的 Lambda 表达式编译为已解释或已编译的代码,并生成表示该 Lambda 表达式的委托。 |
Compile(Boolean) |
生成表示 Lambda 表达式的已解释或已编译委托。 (继承自 LambdaExpression) |
Compile(DebugInfoGenerator) |
生成表示 lambda 表达式的委托。 |
Compile(DebugInfoGenerator) |
生成表示 lambda 表达式的委托。 (继承自 LambdaExpression) |
CompileToMethod(MethodBuilder) |
将 lambda 编译到方法定义中。 (继承自 LambdaExpression) |
CompileToMethod(MethodBuilder, DebugInfoGenerator) |
将 lambda 编译到方法定义和自定义调试信息中。 (继承自 LambdaExpression) |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
Reduce() |
将此节点简化为更简单的表达式。 如果 CanReduce 返回 true,则它应返回有效的表达式。 此方法可以返回本身必须简化的另一个节点。 (继承自 Expression) |
ReduceAndCheck() |
将此节点简化为更简单的表达式。 如果 CanReduce 返回 true,则它应返回有效的表达式。 此方法可以返回本身必须简化的另一个节点。 (继承自 Expression) |
ReduceExtensions() |
将表达式简化为已知节点类型(即非 Extension 节点)或仅在此类型为已知类型时返回表达式。 (继承自 Expression) |
ToString() |
返回 Expression 的的文本化表示形式。 (继承自 Expression) |
Update(Expression, IEnumerable<ParameterExpression>) |
创建一个新的表达式,它类似于此表达式,但使用所提供的子级。 如果所有子级均相同,它将返回此表达式。 |
VisitChildren(ExpressionVisitor) |
简化节点,然后对简化的表达式调用访问者委托。 该方法在节点不可简化时引发异常。 (继承自 Expression) |