为什么要创建类型为 void 且没有名称的标签目标
本文关键字:有名称 标签 目标 void 创建 类型 为什么 | 更新日期: 2023-09-27 18:34:38
System.Linq.Expressions.Expression
类中有一个特定的重载,如下所示:
public static LabelTarget Label();
文档说,"创建一个表示具有 void 类型和没有名称的标签的LabelTarget
。
这甚至意味着什么?为什么要创建类型为 void 且没有名称的标签目标?
如文档所示,它只是作为无表达式的标签:
// 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) );
在这里,创建一个标签,然后在表达式块的末尾进行标记。如果它是使用类型创建的,则必须在第二次调用 Label 期间为其分配一个表达式。因此,由于第二个标签没有分配表达式,因此类型必须为 void。
至于名称,标签的名称不会编译,因此只是为了您的方便,可以在不需要名称时省略名称。