Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Свойство DebugView (доступно только при отладке) предоставляет строковую отрисовку деревьев выражений. Большая часть синтаксиса довольно простая для понимания; Специальные случаи описаны в следующих разделах.
За каждым примером следует комментарий блока, содержащий DebugView.
ParameterExpression
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 | У |
System.Int64 | длинный | L |
System.UInt64 | ulong | УЛ |
System.Double | двойной | Д |
System.Single | плавать | Ф |
System.Decimal | десятичное | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
BlockExpression
Если тип 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
Если указать значение по умолчанию для 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
*/