次の方法で共有


DebugView 構文 (式ツリー)

DebugView プロパティ (デバッグ時にのみ使用できます) は、式ツリーの文字列レンダリングを提供します。 ほとんどの構文は理解が非常に簡単です。特別なケースについては、次のセクションで説明します。

各例の後には、 DebugView を含むコメント ブロックが続きます。

ParameterExpression

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 する ユー
System.Int64 長い L
System.UInt64 ULong する UL規格
System.Double ダブル D
System.Single Single F
System.Decimal 小数 エム

例示

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 オブジェクトはデリゲート型と共に表示されます。

ラムダ式に名前がない場合は、自動的に生成された名前 ( #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 演算子

チェックされた演算子は、演算子の前に # 記号と共に表示されます。 たとえば、チェックされた加算演算子は #+として表示されます。

例示

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
'