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
'