通过


DebugView 语法(表达式树)

DebugView 属性(仅在调试时可用)提供表达式树的字符串呈现。 大多数语法都相当简单明了:以下各节介绍了特殊情况。

每个示例后跟一个包含 DebugView 的注释块。

参数表达式

ParameterExpression 变量名称以“$”符号显示在开头。

如果参数没有名称,则会为其分配自动生成的名称,例如 $var1$var2

例子

Dim numParam As ParameterExpression = Expression.Parameter(GetType(Integer), "num")
'
'    $num
'

Dim numParam As ParameterExpression = Expression.Parameter(GetType(Integer))
'
'    $var1
'

ConstantExpressions

对于 ConstantExpression 表示整数值、字符串和 null常量的值的对象,将显示常量的值。

对于某些数值类型,后缀将添加到值中:

类型 关键字 后缀
System.UInt32 UInteger U
System.Int64 L
System.UInt64 ULong UL
System.Double Double D
System.Single F
System.Decimal 十进制 M

例子

Dim num as Integer = 10
Dim expr As ConstantExpression = Expression.Constant(num)
'
'    10
'

Dim num As Double = 10
Dim expr As ConstantExpression = Expression.Constant(num)
'
'    10D
'

BlockExpression

如果对象的类型与块中最后一个 BlockExpression 表达式的类型不同,则类型显示在尖括号(<>) 中。 否则,不显示对象的类型 BlockExpression

例子

Dim block As BlockExpression = Expression.Block(Expression.Constant("test"))
'
'    .Block() {
'        "test"
'    }
'

Dim block As BlockExpression = Expression.Block(
    GetType(Object),
    Expression.Constant("test")
)
'
'    .Block<System.Object>() {
'        "test"
'    }
'

LambdaExpression

显示 LambdaExpression 对象及其委托类型。

如果 lambda 表达式没有名称,则会为其分配自动生成的名称,例如 #Lambda1#Lambda2

例子

Dim lambda As LambdaExpression = Expression.Lambda(Of Func(Of Integer))(
    Expression.Constant(1)
)
'
'    .Lambda #Lambda1<System.Func'1[System.Int32]>() {
'        1
'    }
'

Dim lambda As LambdaExpression = Expression.Lambda(Of Func(Of Integer))(
    Expression.Constant(1),
    "SampleLambda",
    Nothing
)
'
'    .Lambda #SampleLambda<System.Func'1[System.Int32]>() {
'        1
'    }
'

LabelExpression

如果指定 LabelExpression 对象的默认值,则在 LabelTarget 对象之前显示此值。

标记 .Label 指示标签的开头。 .LabelTarget 令牌指示要跳转到的目标的目的地。

如果标签没有名称,则会为其分配自动生成的名称,例如 #Label1#Label2

例子

Dim target As LabelTarget = Expression.Label(GetType(Integer), "SampleLabel")
Dim label1 As BlockExpression = Expression.Block(
    Expression.Goto(target, Expression.Constant(0)),
    Expression.Label(target, Expression.Constant(-1))
)
'
'    .Block() {
'        .Goto SampleLabel { 0 };
'        .Label
'            -1
'        .LabelTarget SampleLabel:
'    }
'

Dim target As LabelTarget = Expression.Label()
Dim block As BlockExpression = Expression.Block(
    Expression.Goto(target),
    Expression.Label(target)
)
'
'    .Block() {
'        .Goto #Label1 { };
'        .Label
'        .LabelTarget #Label1:
'    }
'

Checked 运算符

Checked 运算符在运算符前面显示 # 符号。 例如,选中的加法运算符显示为 #+

例子

Dim expr As Expression = Expression.AddChecked(
    Expression.Constant(1),
    Expression.Constant(2)
)
'
'     1 #+ 2
'

Dim expr As Expression = Expression.ConvertChecked(
    Expression.Constant(10.0),
    GetType(Integer)
)
'
'    #(System.Int32)10D
'