Expression<TDelegate> 类

定义

将强类型化的 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> 表示的委托的类型。

继承
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>参数。

NodeTypeExpression<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)

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另请参阅