Sintaxe DebugView (árvores de expressão)

A propriedade DebugView (disponível somente durante a depuração) fornece uma renderização de cadeia de caracteres de árvores de expressão. A maior parte da sintaxe é bastante simples de entender; Os casos especiais são descritos nas secções seguintes.

Cada exemplo é seguido por um bloco de comentários contendo o DebugView.

Expressão de Parâmetros

ParameterExpression Os nomes das variáveis são exibidos com um símbolo "$" no início.

Se um parâmetro não tiver um nome, será atribuído um nome gerado automaticamente, como $var1 ou $var2.

Exemplos

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

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

ConstantExpressions

Para ConstantExpression objetos que representam valores inteiros, cadeias de caracteres e null, o valor da constante é exibido.

Para alguns tipos numéricos, um sufixo é adicionado ao valor:

Tipo Palavra-chave Sufixo
System.UInt32 UInteger U
System.Int64 Longo L
System.UInt64 ULong UL
System.Double `Duplo` D
System.Single Solteiro F
System.Decimal Decimal M

Exemplos

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 o tipo de um BlockExpression objeto for diferente do tipo da última expressão no bloco , o tipo será exibido entre colchetes angulares (< e >). Caso contrário, o tipo do BlockExpression objeto não será exibido.

Exemplos

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 Os objetos são exibidos juntamente com seus tipos de delegados.

Se uma expressão lambda não tiver um nome, será atribuído um nome gerado automaticamente, como #Lambda1 ou #Lambda2.

Exemplos

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 você especificar um valor padrão para o LabelExpression objeto, esse valor será exibido antes do LabelTarget objeto.

O .Label token indica o início do rótulo. O .LabelTarget token indica o destino para o qual saltar.

Se um rótulo não tiver um nome, será atribuído um nome gerado automaticamente, como #Label1 ou #Label2.

Exemplos

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

Operadores verificados

Os operadores verificados são exibidos com o # símbolo na frente do operador. Por exemplo, o operador de adição verificada é exibido como #+.

Exemplos

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
'