Condividi tramite


Sintassi DebugView (alberi delle espressioni)

La proprietà DebugView (disponibile solo durante il debug) fornisce un rendering di stringhe degli alberi delle espressioni. La maggior parte della sintassi è piuttosto semplice da comprendere; I casi speciali sono descritti nelle sezioni seguenti.

Ogni esempio è seguito da un blocco di commenti contenente DebugView.

ParameterExpression

ParameterExpression I nomi delle variabili vengono visualizzati con un simbolo "$" all'inizio.

Se un parametro non ha un nome, viene assegnato un nome generato automaticamente, ad esempio $var1 o $var2.

Esempi

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

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

ConstantExpressions

Per ConstantExpression gli oggetti che rappresentano valori interi, stringhe e null, viene visualizzato il valore della costante .

Per alcuni tipi numerici, viene aggiunto un suffisso al valore :

TIPO Parola chiave Suffisso
System.UInt32 UInteger U
System.Int64 lungo L
System.UInt64 ULong UL
System.Double Double D
System.Single Singolo F
System.Decimal Decimale M

Esempi

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

Se il tipo di un BlockExpression oggetto è diverso dal tipo dell'ultima espressione nel blocco, il tipo viene visualizzato tra parentesi angolari (< e >). In caso contrario, il tipo dell'oggetto BlockExpression non viene visualizzato.

Esempi

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 gli oggetti vengono visualizzati insieme ai relativi tipi delegati.

Se un'espressione lambda non ha un nome, viene assegnato un nome generato automaticamente, ad esempio #Lambda1 o #Lambda2.

Esempi

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

Se si specifica un valore predefinito per l'oggetto LabelExpression , questo valore viene visualizzato prima dell'oggetto LabelTarget .

Il .Label token indica l'inizio dell'etichetta. Il .LabelTarget token indica la destinazione verso cui saltare.

Se un'etichetta non ha un nome, viene assegnato un nome generato automaticamente, ad esempio #Label1 o #Label2.

Esempi

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

Operatori controllati

Gli operatori controllati vengono visualizzati con il # simbolo davanti all'operatore . Ad esempio, l'operatore di addizione controllato viene visualizzato come #+.

Esempi

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
'