如果您正苦于以下问题:C# Expression.Label方法的具体用法?C# Expression.Label怎么用?C# Expression.Label使用的例子?那么, 这里精选的代码示例或许能为您提供帮助。
以下是System.Linq.Expressions.Expression
类Expression.Label方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为感觉有用的代码点赞,您的评价将有助于系统推荐出更好的C#代码示例。
示例1: typeof
// 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()();
输出:
Return
"Other Work" is not printed because
the Return expression transfers execution from Expression.Return(returnTarget)
to Expression.Label(returnTarget).
示例2:
// 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);
输出:
120