Compartir a través de


Sintaxis de DebugView (árboles de expresión)

La propiedad DebugView (disponible solo durante la depuración) proporciona una representación de cadenas de árboles de expresión. La mayoría de la sintaxis es bastante sencilla de entender; los casos especiales se describen en las secciones siguientes.

Cada ejemplo va seguido de un bloque de comentarios que contiene DebugView.

ParameterExpression

ParameterExpression Los nombres de variable se muestran con un símbolo "$" al principio.

Si un parámetro no tiene un nombre, se le asigna un nombre generado automáticamente, como $var1 o $var2.

Ejemplos

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

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

ConstantExpressions

Para ConstantExpression los objetos que representan valores enteros, cadenas y null, se muestra el valor de la constante.

Para algunos tipos numéricos, se agrega un sufijo al valor :

Tipo Palabra clave Sufijo
System.UInt32 UInteger U
System.Int64 Largo L
System.UInt64 ULong UL
System.Double Double D
System.Single Single F
System.Decimal Decimal M

Ejemplos

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

Si el tipo de un BlockExpression objeto difiere del tipo de la última expresión del bloque, el tipo se muestra entre corchetes angulares (< y >). De lo contrario, no se muestra el BlockExpression tipo del objeto.

Ejemplos

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 Los objetos se muestran junto con sus tipos delegados.

Si una expresión lambda no tiene un nombre, se le asigna un nombre generado automáticamente, como #Lambda1 o #Lambda2.

Ejemplos

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

Si especifica un valor predeterminado para el LabelExpression objeto , este valor se muestra antes del LabelTarget objeto .

El .Label token indica el inicio de la etiqueta. El .LabelTarget token indica el destino al que se va a saltar.

Si una etiqueta no tiene un nombre, se le asigna un nombre generado automáticamente, como #Label1 o #Label2.

Ejemplos

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 comprobados

Los operadores comprobados se muestran con el # símbolo delante del operador. Por ejemplo, el operador de suma verificada se muestra como #+.

Ejemplos

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
'