DebugView 속성(디버깅할 때만 사용 가능)은 식 트리의 문자열 렌더링을 제공합니다. 대부분의 구문은 이해하기가 매우 간단합니다. 특수 사례는 다음 섹션에 설명되어 있습니다.
각 예제 뒤에 DebugView를 포함하는 블록 주석이 잇습니다.
매개변수 표현
ParameterExpression 변수 이름은 시작 부분에 기호와 $
함께 표시됩니다.
매개 변수에 이름이 없으면 자동으로 생성된 이름(예: $var1
또는 $var2
.)이 할당됩니다.
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
/*
$num
*/
ParameterExpression numParam = Expression.Parameter(typeof(int));
/*
$var1
*/
ConstantExpression
정수 값, 문자열 및 ConstantExpression상수의 값을 나타내는 개체의 경우 null
표시됩니다.
표준 접미사가 C# 리터럴인 숫자 형식의 경우 접미사가 값에 추가됩니다. 다음 표에서는 다양한 숫자 형식과 연결된 접미사를 보여줍니다.
유형 | 키워드 | 접미사 |
---|---|---|
System.UInt32 | uint | U |
System.Int64 | 길다 | 엘 |
System.UInt64 | ulong | UL |
System.Double | 더블 | D |
System.Single | 플로트 | F |
System.Decimal | 십진수 | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
블록 표현식
개체의 BlockExpression 형식이 블록의 마지막 식 형식과 다른 경우 형식은 꺾쇠 괄호(<
및 >
)에 표시됩니다. 그렇지 않으면 개체의 형식이 BlockExpression 표시되지 않습니다.
BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
.Block() {
"test"
}
*/
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test"));
/*
.Block<System.Object>() {
"test"
}
*/
람다익스프레션
LambdaExpression 개체는 대리자 형식과 함께 표시됩니다.
람다 식에 이름이 없으면 자동으로 생성된 이름(예: #Lambda1
또는 #Lambda2
.)이 할당됩니다.
LambdaExpression lambda = Expression.Lambda<Func<int>>(Expression.Constant(1));
/*
.Lambda #Lambda1<System.Func'1[System.Int32]>() {
1
}
*/
LambdaExpression lambda = Expression.Lambda<Func<int>>(Expression.Constant(1), "SampleLambda", null);
/*
.Lambda #SampleLambda<System.Func'1[System.Int32]>() {
1
}
*/
레이블 익스프레션
개체의 기본값을 LabelExpression 지정하면 이 값이 개체 앞에 LabelTarget 표시됩니다.
토큰은 .Label
레이블의 시작을 나타냅니다.
.LabelTarget
토큰은 이동할 대상의 목적지를 나타냅니다.
레이블에 이름이 없으면 자동으로 생성된 이름(예: #Label1
또는 #Label2
.)이 할당됩니다.
LabelTarget target = Expression.Label(typeof(int), "SampleLabel");
BlockExpression block = Expression.Block(
Expression.Goto(target, Expression.Constant(0)),
Expression.Label(target, Expression.Constant(-1))
);
/*
.Block() {
.Goto SampleLabel { 0 };
.Label
-1
.LabelTarget SampleLabel:
}
*/
LabelTarget target = Expression.Label();
BlockExpression block = Expression.Block(
Expression.Goto(target),
Expression.Label(target)
);
/*
.Block() {
.Goto #Label1 { };
.Label
.LabelTarget #Label1:
}
*/
검사된 연산자
체크된 연산자는 연산자 앞에 #
기호와 함께 표시됩니다. 예를 들어 확인된 더하기 연산자는 .로 #+
표시됩니다.
Expression expr = Expression.AddChecked( Expression.Constant(1), Expression.Constant(2));
/*
1 #+ 2
*/
Expression expr = Expression.ConvertChecked( Expression.Constant(10.0), typeof(int));
/*
#(System.Int32)10D
*/
.NET