다음을 통해 공유


DebugView 구문(식 트리)

DebugView 속성(디버깅할 때만 사용 가능)은 식 트리의 문자열 렌더링을 제공합니다. 대부분의 구문은 이해하기가 매우 간단합니다. 특수 사례는 다음 섹션에 설명되어 있습니다.

각 예제 뒤에 DebugView가 포함된 주석 블록이 잇습니다.

매개변수 표현

ParameterExpression 변수 이름은 처음에 "$" 기호와 함께 표시됩니다.

매개 변수에 이름이 없으면 자동으로 생성된 이름(예: $var1 또는 $var2.)이 할당됩니다.

예시

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

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

ConstantExpressions

정수 값, 문자열 및 ConstantExpression상수의 값을 나타내는 개체의 경우 null 표시됩니다.

일부 숫자 형식의 경우 접미사가 값에 추가됩니다.

유형 키워드 접미사
System.UInt32 UInteger U
System.Int64 오래
System.UInt64 ULong UL
System.Double 이중 D
System.Single 싱글 F
System.Decimal 10진수 M

예시

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 형식이 블록의 마지막 식 형식과 다른 경우 형식은 꺾쇠 괄호(<>)에 표시됩니다. 그렇지 않으면 개체의 형식이 BlockExpression 표시되지 않습니다.

예시

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 개체는 대리자 형식과 함께 표시됩니다.

람다 식에 이름이 없으면 자동으로 생성된 이름(예: #Lambda1 또는 #Lambda2.)이 할당됩니다.

예시

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 지정하면 이 값이 개체 앞에 LabelTarget 표시됩니다.

토큰은 .Label 레이블의 시작을 나타냅니다. .LabelTarget 토큰은 이동할 대상의 목적지를 나타냅니다.

레이블에 이름이 없으면 자동으로 생성된 이름(예: #Label1 또는 #Label2.)이 할당됩니다.

예시

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

검사된 연산자

체크된 연산자는 연산자 앞에 # 기호와 함께 표시됩니다. 예를 들어 확인된 더하기 연산자는 .로 #+표시됩니다.

예시

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
'