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) |
Can |
指示可将节点简化为更简单的节点。 如果返回 true,则可以调用 Reduce() 以生成简化形式。 (继承自 Expression) |
Name |
获取 lambda 表达式的名称。 (继承自 LambdaExpression) |
Node |
返回此 Expression 的节点类型。 (继承自 LambdaExpression) |
Parameters |
获取 lambda 表达式的参数。 (继承自 LambdaExpression) |
Return |
获取 lambda 表达式的返回类型。 (继承自 LambdaExpression) |
Tail |
获取一个值,该值指示是否将通过尾调用优化来编译 lambda 表达式。 (继承自 LambdaExpression) |
Type |
获取此 Expression 表示的表达式的静态类型。 (继承自 LambdaExpression) |
Accept(Expression |
调度到此节点类型的特定 Visit 方法。 例如,MethodCallExpression 调用 VisitMethodCall(MethodCallExpression)。 (继承自 Expression) |
Compile() |
将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示 lambda 表达式的委托。 |
Compile(Boolean) |
将表达式树描述的 Lambda 表达式编译为已解释或已编译的代码,并生成表示该 Lambda 表达式的委托。 |
Compile(Boolean) |
生成表示 Lambda 表达式的已解释或已编译委托。 (继承自 LambdaExpression) |
Compile(Debug |
生成表示 lambda 表达式的委托。 |
Compile(Debug |
生成表示 lambda 表达式的委托。 (继承自 LambdaExpression) |
Compile |
将 lambda 编译到方法定义中。 (继承自 LambdaExpression) |
Compile |
将 lambda 编译到方法定义和自定义调试信息中。 (继承自 LambdaExpression) |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
Get |
作为默认哈希函数。 (继承自 Object) |
Get |
获取当前实例的 Type。 (继承自 Object) |
Memberwise |
创建当前 Object 的浅表副本。 (继承自 Object) |
Reduce() |
将此节点简化为更简单的表达式。 如果 CanReduce 返回 true,则它应返回有效的表达式。 此方法可以返回本身必须简化的另一个节点。 (继承自 Expression) |
Reduce |
将此节点简化为更简单的表达式。 如果 CanReduce 返回 true,则它应返回有效的表达式。 此方法可以返回本身必须简化的另一个节点。 (继承自 Expression) |
Reduce |
将表达式简化为已知节点类型(即非 Extension 节点)或仅在此类型为已知类型时返回表达式。 (继承自 Expression) |
To |
返回 Expression 的的文本化表示形式。 (继承自 Expression) |
Update(Expression, IEnumerable<Parameter |
创建一个新的表达式,它类似于此表达式,但使用所提供的子级。 如果所有子级均相同,它将返回此表达式。 |
Visit |
简化节点,然后对简化的表达式调用访问者委托。 该方法在节点不可简化时引发异常。 (继承自 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 |