Expression.Label 方法

定义

创建一个表示标签的 LabelTarget

重载

Label()

创建一个 LabelTarget,它表示具有 void 类型但没有名称的标签。

Label(LabelTarget)

创建一个LabelExpression,它表示不带默认值的标签。

Label(String)

创建一个 LabelTarget,它表示具有 void 类型和给定名称的标签。

Label(Type)

创建一个 LabelTarget,它表示具有给定类型的标签。

Label(LabelTarget, Expression)

创建一个 LabelExpression,它表示具有给定默认值的标签。

Label(Type, String)

创建一个 LabelTarget,它表示具有给定类型和名称的标签。

Label()

Source:
LabelTarget.cs
Source:
LabelTarget.cs
Source:
LabelTarget.cs

创建一个 LabelTarget,它表示具有 void 类型但没有名称的标签。

public:
 static System::Linq::Expressions::LabelTarget ^ Label();
public static System.Linq.Expressions.LabelTarget Label ();
static member Label : unit -> System.Linq.Expressions.LabelTarget
Public Shared Function Label () As LabelTarget

返回

新的 LabelTarget

示例

以下示例演示如何创建包含 LabelTarget 对象的表达式。

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

// A label expression of the void type that is the target for Expression.Return().
LabelTarget returnTarget = Expression.Label();

// This block contains a GotoExpression that represents a return statement with no value.
// It transfers execution to a label expression that is initialized with the same LabelTarget as the GotoExpression.
// The types of the GotoExpression, label expression, and LabelTarget must match.
BlockExpression blockExpr =
    Expression.Block(
        Expression.Call(typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), Expression.Constant("Return")),
        Expression.Return(returnTarget),
        Expression.Call(typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), Expression.Constant("Other Work")),
        Expression.Label(returnTarget)
    );

// The following statement first creates an expression tree,
// then compiles it, and then runs it.
Expression.Lambda<Action>(blockExpr).Compile()();

// This code example produces the following output:
//
// Return

// "Other Work" is not printed because
// the Return expression transfers execution from Expression.Return(returnTarget)
// to Expression.Label(returnTarget).
' Add the following directive to the file:
' Imports System.Linq.Expressions  

' A label expression of the void type that is the target for Expression.Return().
Dim returnTarget As LabelTarget = Expression.Label()

' This block contains a GotoExpression that represents a return statement with no value.
' It transfers execution to a label expression that is initialized with the same LabelTarget as the GotoExpression.
' The types of the GotoExpression, label expression, and LabelTarget must match.
Dim blockExpr As BlockExpression =
      Expression.Block(
          Expression.Call(GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}), Expression.Constant("Return")),
          Expression.Return(returnTarget),
          Expression.Call(GetType(Console).GetMethod("WriteLine", New Type() {GetType(String)}), Expression.Constant("Other Work")),
          Expression.Label(returnTarget)
      )

' The following statement first creates an expression tree,
' then compiles it, and then runs it.
Expression.Lambda(Of Action)(blockExpr).Compile()()

' This code example produces the following output:
'
' Return

' "Other Work" is not printed because 
' the Return expression transfers execution from Return(returnTarget)
' to Expression.Label(returnTarget).

适用于

Label(LabelTarget)

Source:
LabelExpression.cs
Source:
LabelExpression.cs
Source:
LabelExpression.cs

创建一个LabelExpression,它表示不带默认值的标签。

public:
 static System::Linq::Expressions::LabelExpression ^ Label(System::Linq::Expressions::LabelTarget ^ target);
public static System.Linq.Expressions.LabelExpression Label (System.Linq.Expressions.LabelTarget target);
static member Label : System.Linq.Expressions.LabelTarget -> System.Linq.Expressions.LabelExpression
Public Shared Function Label (target As LabelTarget) As LabelExpression

参数

target
LabelTarget

LabelTarget 将关联的 LabelExpression

返回

不带默认值的 LabelExpression

适用于

Label(String)

Source:
LabelTarget.cs
Source:
LabelTarget.cs
Source:
LabelTarget.cs

创建一个 LabelTarget,它表示具有 void 类型和给定名称的标签。

public:
 static System::Linq::Expressions::LabelTarget ^ Label(System::String ^ name);
public static System.Linq.Expressions.LabelTarget Label (string name);
public static System.Linq.Expressions.LabelTarget Label (string? name);
static member Label : string -> System.Linq.Expressions.LabelTarget
Public Shared Function Label (name As String) As LabelTarget

参数

name
String

标签的名称。

返回

新的 LabelTarget

适用于

Label(Type)

Source:
LabelTarget.cs
Source:
LabelTarget.cs
Source:
LabelTarget.cs

创建一个 LabelTarget,它表示具有给定类型的标签。

public:
 static System::Linq::Expressions::LabelTarget ^ Label(Type ^ type);
public static System.Linq.Expressions.LabelTarget Label (Type type);
static member Label : Type -> System.Linq.Expressions.LabelTarget
Public Shared Function Label (type As Type) As LabelTarget

参数

type
Type

跳转到标签时传递的值的类型。

返回

新的 LabelTarget

示例

以下示例演示如何在循环表达式中使用 LabelTarget 对象。

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

// Creating a parameter expression.
ParameterExpression value = Expression.Parameter(typeof(int), "value");

// Creating an expression to hold a local variable.
ParameterExpression result = Expression.Parameter(typeof(int), "result");

// Creating a label to jump to from a loop.
LabelTarget label = Expression.Label(typeof(int));

// Creating a method body.
BlockExpression block = Expression.Block(
    new[] { result },
    Expression.Assign(result, Expression.Constant(1)),
        Expression.Loop(
           Expression.IfThenElse(
               Expression.GreaterThan(value, Expression.Constant(1)),
               Expression.MultiplyAssign(result,
                   Expression.PostDecrementAssign(value)),
               Expression.Break(label, result)
           ),
       label
    )
);

// Compile and run an expression tree.
int factorial = Expression.Lambda<Func<int, int>>(block, value).Compile()(5);

Console.WriteLine(factorial);

// This code example produces the following output:
//
// 120
' Add the following directive to the file:
' Imports System.Linq.Expressions  

' Creating a parameter expression.
Dim value As ParameterExpression =
    Expression.Parameter(GetType(Integer), "value")

' Creating an expression to hold a local variable. 
Dim result As ParameterExpression =
    Expression.Parameter(GetType(Integer), "result")

' Creating a label to jump to from a loop.
Dim label As LabelTarget = Expression.Label(GetType(Integer))

' Creating a method body.
Dim block As BlockExpression = Expression.Block(
    New ParameterExpression() {result},
    Expression.Assign(result, Expression.Constant(1)),
    Expression.Loop(
        Expression.IfThenElse(
            Expression.GreaterThan(value, Expression.Constant(1)),
            Expression.MultiplyAssign(result,
                Expression.PostDecrementAssign(value)),
            Expression.Break(label, result)
        ),
        label
    )
)

' Compile an expression tree and return a delegate.
Dim factorial As Integer =
    Expression.Lambda(Of Func(Of Integer, Integer))(block, value).Compile()(5)

Console.WriteLine(factorial)

' This code example produces the following output:
'
' 120

适用于

Label(LabelTarget, Expression)

Source:
LabelExpression.cs
Source:
LabelExpression.cs
Source:
LabelExpression.cs

创建一个 LabelExpression,它表示具有给定默认值的标签。

public:
 static System::Linq::Expressions::LabelExpression ^ Label(System::Linq::Expressions::LabelTarget ^ target, System::Linq::Expressions::Expression ^ defaultValue);
public static System.Linq.Expressions.LabelExpression Label (System.Linq.Expressions.LabelTarget target, System.Linq.Expressions.Expression defaultValue);
public static System.Linq.Expressions.LabelExpression Label (System.Linq.Expressions.LabelTarget target, System.Linq.Expressions.Expression? defaultValue);
static member Label : System.Linq.Expressions.LabelTarget * System.Linq.Expressions.Expression -> System.Linq.Expressions.LabelExpression
Public Shared Function Label (target As LabelTarget, defaultValue As Expression) As LabelExpression

参数

target
LabelTarget

LabelTarget 将关联的 LabelExpression

defaultValue
Expression

当通过常规控制流到达标签时,此 LabelExpression 的值。

返回

具有给定默认值的 LabelExpression

适用于

Label(Type, String)

Source:
LabelTarget.cs
Source:
LabelTarget.cs
Source:
LabelTarget.cs

创建一个 LabelTarget,它表示具有给定类型和名称的标签。

public:
 static System::Linq::Expressions::LabelTarget ^ Label(Type ^ type, System::String ^ name);
public static System.Linq.Expressions.LabelTarget Label (Type type, string name);
public static System.Linq.Expressions.LabelTarget Label (Type type, string? name);
static member Label : Type * string -> System.Linq.Expressions.LabelTarget
Public Shared Function Label (type As Type, name As String) As LabelTarget

参数

type
Type

跳转到标签时传递的值的类型。

name
String

标签的名称。

返回

新的 LabelTarget

适用于