Składnia debugview (drzewa wyrażeń)

Właściwość DebugView (dostępna tylko podczas debugowania) udostępnia renderowanie ciągów drzew wyrażeń. Większość składni jest dość prosta do zrozumienia; w poniższych sekcjach opisano przypadki specjalne.

Po każdym przykładzie następuje blok komentarza zawierający widok DebugView.

ParametrWyrażenie

ParameterExpression Nazwy zmiennych są wyświetlane z symbolem "$" na początku.

Jeśli parametr nie ma nazwy, zostanie przypisana automatycznie wygenerowana nazwa, na przykład $var1 lub $var2.

Przykłady

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

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

ConstantExpressions

W przypadku ConstantExpression obiektów reprezentujących wartości całkowite, ciągi i null, wyświetlana jest wartość stałej.

W przypadku niektórych typów liczb sufiks jest dodawany do wartości:

Typ Słowo kluczowe Sufiks
System.UInt32 liczba całkowita UInteger U
System.Int64 Długi L
System.UInt64 ULong UL
System.Double Podwójne D
System.Single Pojedynczy F
System.Decimal dziesiętny M

Przykłady

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

Jeśli typ BlockExpression obiektu różni się od typu ostatniego wyrażenia w bloku, typ jest wyświetlany w nawiasach kątowych (< i >). W przeciwnym razie typ BlockExpression obiektu nie jest wyświetlany.

Przykłady

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 obiekty są wyświetlane razem z ich typami delegatów.

Jeśli wyrażenie lambda nie ma nazwy, zostanie przypisana automatycznie wygenerowana nazwa, na przykład #Lambda1 lub #Lambda2.

Przykłady

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

Jeśli określisz wartość domyślną dla LabelExpression obiektu, ta wartość zostanie wyświetlona przed obiektem LabelTarget .

Token .Label wskazuje początek etykiety. Token .LabelTarget wskazuje miejsce docelowe, do którego ma przejść.

Jeśli etykieta nie ma nazwy, jest przypisana automatycznie wygenerowana nazwa, na przykład #Label1 lub #Label2.

Przykłady

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

Sprawdzone operatory

Zaznaczeni operatorzy są wyświetlani z znakiem # przed operatorem. Na przykład sprawdzony operator dodawania jest wyświetlany jako #+.

Przykłady

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
'