Syntaxe DebugView (stromy výrazů)

Vlastnost DebugView (k dispozici pouze při ladění) poskytuje řetězcové vykreslování stromů výrazů. Většina syntaxe je poměrně jednoduchá pro pochopení; zvláštní případy jsou popsány v následujících částech.

Každý příklad následuje blok komentáře obsahující DebugView.

ParameterExpression

ParameterExpression Názvy proměnných se zobrazí se symbolem $na začátku.

Pokud parametr nemá název, přiřadí se mu automaticky vygenerovaný název, například $var1 nebo $var2.

Příklady

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

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

ConstantExpressions

Pro ConstantExpression objekty, které představují celočíselné hodnoty, řetězce a null, se zobrazí hodnota konstanty.

U některých číselných typů se k hodnotě přidá přípona:

Typ Klíčové slovo Přípona
System.UInt32 Neznaménkový integer U
System.Int64 Dlouhý L
System.UInt64 ULong UL
System.Double Dvojitý D
System.Single Jednoduchý F
System.Decimal Desetinné číslo M

Příklady

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

Pokud se typ objektu BlockExpression liší od typu posledního výrazu v bloku, typ se zobrazí v úhlových závorkách (< a >). V opačném případě se typ objektu BlockExpression nezobrazí.

Příklady

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 objekty se zobrazují společně s jejich typy delegátů.

Pokud výraz lambda nemá název, přiřadí se mu automaticky vygenerovaný název, například #Lambda1 nebo #Lambda2.

Příklady

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

Pokud zadáte výchozí hodnotu objektu LabelExpression , zobrazí se tato hodnota před objektem LabelTarget .

Token .Label označuje začátek popisku. Token .LabelTarget označuje místo, na které se má přejít.

Pokud popisek nemá název, přiřadí se mu automaticky vygenerovaný název, například #Label1 nebo #Label2.

Příklady

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:
'    }
'

Zaškrtnuté operátory

Zaškrtnuté operátory se zobrazí se # symbolem před operátorem. Například, zaškrtnutý operátor sčítání se zobrazí jako #+.

Příklady

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
'