Expression.Block 方法

定义

创建一个 BlockExpression

重载

Block(Type, IEnumerable<ParameterExpression>, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定的变量和表达式。

Block(Expression, Expression, Expression)

创建一个 BlockExpression,其中包含三个表达式,但不包含任何变量。

Block(Expression, Expression, Expression, Expression, Expression)

创建一个 BlockExpression,其中包含五个表达式,但不包含任何变量。

Block(Type, IEnumerable<ParameterExpression>, Expression[])

创建一个 BlockExpression,其中包含给定的变量和表达式。

Block(Type, Expression[])

创建一个 BlockExpression,其中包含给定表达式和特定结果类型,但不包含任何变量。

Block(Expression, Expression, Expression, Expression)

创建一个 BlockExpression,其中包含四个表达式,但不包含任何变量。

Block(Expression, Expression)

创建一个 BlockExpression,其中包含两个表达式,但不包含任何变量。

Block(IEnumerable<ParameterExpression>, Expression[])

创建一个 BlockExpression,其中包含给定的变量和表达式。

Block(IEnumerable<ParameterExpression>, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定的变量和表达式。

Block(Expression[])

创建一个 BlockExpression,其中包含给定表达式,但不包含任何变量。

Block(IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定表达式,但不包含任何变量。

Block(Type, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定表达式和特定结果类型,但不包含任何变量。

Block(Type, IEnumerable<ParameterExpression>, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定的变量和表达式。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(Type ^ type, System::Collections::Generic::IEnumerable<System::Linq::Expressions::ParameterExpression ^> ^ variables, System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression> variables, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression>? variables, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
static member Block : Type * seq<System.Linq.Expressions.ParameterExpression> * seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (type As Type, variables As IEnumerable(Of ParameterExpression), expressions As IEnumerable(Of Expression)) As BlockExpression

参数

type
Type

块的结果类型。

variables
IEnumerable<ParameterExpression>

块中的变量。

expressions
IEnumerable<Expression>

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

适用于

Block(Expression, Expression, Expression)

创建一个 BlockExpression,其中包含三个表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Linq::Expressions::Expression ^ arg0, System::Linq::Expressions::Expression ^ arg1, System::Linq::Expressions::Expression ^ arg2);
public static System.Linq.Expressions.BlockExpression Block (System.Linq.Expressions.Expression arg0, System.Linq.Expressions.Expression arg1, System.Linq.Expressions.Expression arg2);
static member Block : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (arg0 As Expression, arg1 As Expression, arg2 As Expression) As BlockExpression

参数

arg0
Expression

块中的第一个表达式。

arg1
Expression

块中的第二个表达式。

arg2
Expression

块中的第三个表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(Expression, Expression, Expression, Expression, Expression)

创建一个 BlockExpression,其中包含五个表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Linq::Expressions::Expression ^ arg0, System::Linq::Expressions::Expression ^ arg1, System::Linq::Expressions::Expression ^ arg2, System::Linq::Expressions::Expression ^ arg3, System::Linq::Expressions::Expression ^ arg4);
public static System.Linq.Expressions.BlockExpression Block (System.Linq.Expressions.Expression arg0, System.Linq.Expressions.Expression arg1, System.Linq.Expressions.Expression arg2, System.Linq.Expressions.Expression arg3, System.Linq.Expressions.Expression arg4);
static member Block : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (arg0 As Expression, arg1 As Expression, arg2 As Expression, arg3 As Expression, arg4 As Expression) As BlockExpression

参数

arg0
Expression

块中的第一个表达式。

arg1
Expression

块中的第二个表达式。

arg2
Expression

块中的第三个表达式。

arg3
Expression

块中的第四个表达式。

arg4
Expression

块中的第五个表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(Type, IEnumerable<ParameterExpression>, Expression[])

创建一个 BlockExpression,其中包含给定的变量和表达式。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(Type ^ type, System::Collections::Generic::IEnumerable<System::Linq::Expressions::ParameterExpression ^> ^ variables, ... cli::array <System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression> variables, params System.Linq.Expressions.Expression[] expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression>? variables, params System.Linq.Expressions.Expression[] expressions);
static member Block : Type * seq<System.Linq.Expressions.ParameterExpression> * System.Linq.Expressions.Expression[] -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (type As Type, variables As IEnumerable(Of ParameterExpression), ParamArray expressions As Expression()) As BlockExpression

参数

type
Type

块的结果类型。

variables
IEnumerable<ParameterExpression>

块中的变量。

expressions
Expression[]

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

适用于

Block(Type, Expression[])

创建一个 BlockExpression,其中包含给定表达式和特定结果类型,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(Type ^ type, ... cli::array <System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, params System.Linq.Expressions.Expression[] expressions);
static member Block : Type * System.Linq.Expressions.Expression[] -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (type As Type, ParamArray expressions As Expression()) As BlockExpression

参数

type
Type

块的结果类型。

expressions
Expression[]

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

适用于

Block(Expression, Expression, Expression, Expression)

创建一个 BlockExpression,其中包含四个表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Linq::Expressions::Expression ^ arg0, System::Linq::Expressions::Expression ^ arg1, System::Linq::Expressions::Expression ^ arg2, System::Linq::Expressions::Expression ^ arg3);
public static System.Linq.Expressions.BlockExpression Block (System.Linq.Expressions.Expression arg0, System.Linq.Expressions.Expression arg1, System.Linq.Expressions.Expression arg2, System.Linq.Expressions.Expression arg3);
static member Block : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression * System.Linq.Expressions.Expression -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (arg0 As Expression, arg1 As Expression, arg2 As Expression, arg3 As Expression) As BlockExpression

参数

arg0
Expression

块中的第一个表达式。

arg1
Expression

块中的第二个表达式。

arg2
Expression

块中的第三个表达式。

arg3
Expression

块中的第四个表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(Expression, Expression)

创建一个 BlockExpression,其中包含两个表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Linq::Expressions::Expression ^ arg0, System::Linq::Expressions::Expression ^ arg1);
public static System.Linq.Expressions.BlockExpression Block (System.Linq.Expressions.Expression arg0, System.Linq.Expressions.Expression arg1);
static member Block : System.Linq.Expressions.Expression * System.Linq.Expressions.Expression -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (arg0 As Expression, arg1 As Expression) As BlockExpression

参数

arg0
Expression

块中的第一个表达式。

arg1
Expression

块中的第二个表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(IEnumerable<ParameterExpression>, Expression[])

创建一个 BlockExpression,其中包含给定的变量和表达式。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Collections::Generic::IEnumerable<System::Linq::Expressions::ParameterExpression ^> ^ variables, ... cli::array <System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression> variables, params System.Linq.Expressions.Expression[] expressions);
public static System.Linq.Expressions.BlockExpression Block (System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression>? variables, params System.Linq.Expressions.Expression[] expressions);
static member Block : seq<System.Linq.Expressions.ParameterExpression> * System.Linq.Expressions.Expression[] -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (variables As IEnumerable(Of ParameterExpression), ParamArray expressions As Expression()) As BlockExpression

参数

variables
IEnumerable<ParameterExpression>

块中的变量。

expressions
Expression[]

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(IEnumerable<ParameterExpression>, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定的变量和表达式。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Collections::Generic::IEnumerable<System::Linq::Expressions::ParameterExpression ^> ^ variables, System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression> variables, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
public static System.Linq.Expressions.BlockExpression Block (System.Collections.Generic.IEnumerable<System.Linq.Expressions.ParameterExpression>? variables, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
static member Block : seq<System.Linq.Expressions.ParameterExpression> * seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (variables As IEnumerable(Of ParameterExpression), expressions As IEnumerable(Of Expression)) As BlockExpression

参数

variables
IEnumerable<ParameterExpression>

块中的变量。

expressions
IEnumerable<Expression>

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

示例

下面的代码示例演示如何将参数传递给块表达式并在块内处理此参数。

// Add the following directive to your file:
// using System.Linq.Expressions;

// This block has a parameter expression
// that represents a variable within the block scope.
// It assigns a value to the variable,
// and then adds a constant to the assigned value.

ParameterExpression varExpr = Expression.Variable(typeof(int), "sampleVar");
BlockExpression blockExpr = Expression.Block(
    new ParameterExpression[] { varExpr },
    Expression.Assign(varExpr, Expression.Constant(1)),
    Expression.Add(varExpr, Expression.Constant(5))
);

// Print out the expressions from the block expression.
Console.WriteLine("The expressions from the block expression:");
foreach (var expr in blockExpr.Expressions)
    Console.WriteLine(expr.ToString());

Console.WriteLine("The result of executing the expression tree:");
// The following statement first creates an expression tree,
// then compiles it, and then executes it.
Console.WriteLine(
    Expression.Lambda<Func<int>>(blockExpr).Compile()());

// This code example produces the following output:
// The expressions from the block expression:
// (sampleVar = 1)
// (sampleVar + 5)
// The result of executing the expression tree:
// 6
' Add the following directive to your file:
' Imports System.Linq.Expressions  


' This block has a parameter expression
' that represents a variable within the block scope.
' It assigns a value to the variable,
' and then adds a constant to the assigned value. 

Dim varExpr As ParameterExpression = Expression.Variable(GetType(Integer), "sampleVar")
Dim blockExpr As BlockExpression = Expression.Block(
    New ParameterExpression() {varExpr},
    Expression.Assign(varExpr, Expression.Constant(1)),
    Expression.Add(varExpr, Expression.Constant(5))
)

' Print the expressions from the block expression.

Console.WriteLine("The expressions from the block expression:")
For Each expr In blockExpr.Expressions
    Console.WriteLine(expr.ToString())
Next

Console.WriteLine("The result of executing the expression tree:")

' The following statement first creates an expression tree,
' then compiles it, and then executes it.
Console.WriteLine(
    Expression.Lambda(Of Func(Of Integer))(blockExpr).Compile()())

' This code example produces the following output:
'
' The expressions from the block expression:
' (sampleVar = 1)
' (sampleVar + 5)
' The result of executing the expression tree:
' 6

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(Expression[])

创建一个 BlockExpression,其中包含给定表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(... cli::array <System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (params System.Linq.Expressions.Expression[] expressions);
static member Block : System.Linq.Expressions.Expression[] -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (ParamArray expressions As Expression()) As BlockExpression

参数

expressions
Expression[]

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

示例

下面的代码示例演示如何创建块表达式。 块表达式由两 MethodCallExpression 个对象和一个 ConstantExpression 对象组成。

// Add the following directive to your file:
// using System.Linq.Expressions;

// The block expression allows for executing several expressions sequentually.
// When the block expression is executed,
// it returns the value of the last expression in the sequence.
BlockExpression blockExpr = Expression.Block(
    Expression.Call(
        null,
        typeof(Console).GetMethod("Write", new Type[] { typeof(String) }),
        Expression.Constant("Hello ")
       ),
    Expression.Call(
        null,
        typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),
        Expression.Constant("World!")
        ),
    Expression.Constant(42)
);

Console.WriteLine("The result of executing the expression tree:");
// The following statement first creates an expression tree,
// then compiles it, and then executes it.
var result = Expression.Lambda<Func<int>>(blockExpr).Compile()();

// Print out the expressions from the block expression.
Console.WriteLine("The expressions from the block expression:");
foreach (var expr in blockExpr.Expressions)
    Console.WriteLine(expr.ToString());

// Print out the result of the tree execution.
Console.WriteLine("The return value of the block expression:");
Console.WriteLine(result);

// This code example produces the following output:
//
// The result of executing the expression tree:
// Hello World!

// The expressions from the block expression:
// Write("Hello ")
// WriteLine("World!")
// 42

// The return value of the block expression:
// 42
' Add the following directive to your file:
' Imports System.Linq.Expressions

' The block expression enables you to execute several expressions sequentually.
' When the block expression is executed,
' it returns the value of the last expression in the sequence.
Dim blockExpr As BlockExpression = Expression.Block(
    Expression.Call(
        Nothing,
        GetType(Console).GetMethod("Write", New Type() {GetType(String)}),
        Expression.Constant("Hello ")
       ),
    Expression.Call(
        Nothing,
        GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}),
        Expression.Constant("World!")
        ),
    Expression.Constant(42)
)

Console.WriteLine("The result of executing the expression tree:")
' The following statement first creates an expression tree,
' then compiles it, and then executes it.           
Dim result = Expression.Lambda(Of Func(Of Integer))(blockExpr).Compile()()

' Print the expressions from the block expression.
Console.WriteLine("The expressions from the block expression:")
For Each expr In blockExpr.Expressions
    Console.WriteLine(expr.ToString())
Next

' Print the result of the tree execution.
Console.WriteLine("The return value of the block expression:")
Console.WriteLine(result)

' This code example produces the following output:
'
' The result of executing the expression tree:
' Hello World!

' The expressions from the block expression:
' Write("Hello ")
' WriteLine("World!")
' 42

' The return value of the block expression:
' 42

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定表达式,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
static member Block : seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (expressions As IEnumerable(Of Expression)) As BlockExpression

参数

expressions
IEnumerable<Expression>

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

注解

执行块表达式时,它将返回块中最后一个表达式的值。

适用于

Block(Type, IEnumerable<Expression>)

创建一个 BlockExpression,其中包含给定表达式和特定结果类型,但不包含任何变量。

public:
 static System::Linq::Expressions::BlockExpression ^ Block(Type ^ type, System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ expressions);
public static System.Linq.Expressions.BlockExpression Block (Type type, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> expressions);
static member Block : Type * seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.BlockExpression
Public Shared Function Block (type As Type, expressions As IEnumerable(Of Expression)) As BlockExpression

参数

type
Type

块的结果类型。

expressions
IEnumerable<Expression>

块中的表达式。

返回

BlockExpression

创建的 BlockExpression

适用于