DebugView-syntaxis
De eigenschap DebugView (alleen beschikbaar bij foutopsporing) biedt een tekenreeksweergave van expressiestructuren. De meeste syntaxis is vrij eenvoudig te begrijpen; de speciale gevallen worden beschreven in de volgende secties.
Elk voorbeeld wordt gevolgd door een blokopmerking, met daarin de Foutopsporingsweergave.
ParameterExpressie
ParameterExpression namen van variabelen worden weergegeven met een $
symbool aan het begin.
Als een parameter geen naam heeft, wordt er een automatisch gegenereerde naam toegewezen, zoals $var1
of $var2
.
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
/*
$num
*/
ParameterExpression numParam = Expression.Parameter(typeof(int));
/*
$var1
*/
ConstantExpression
Voor ConstantExpression objecten die gehele getallen, tekenreeksen en null
de waarde van de constante vertegenwoordigen, wordt weergegeven.
Voor numerieke typen met standaardachtervoegsels als C#-letterlijke waarden wordt het achtervoegsel toegevoegd aan de waarde. In de volgende tabel ziet u de achtervoegsels die zijn gekoppeld aan verschillende numerieke typen.
Type | Trefwoord | Achtervoegsel |
---|---|---|
System.UInt32 | Uint | U |
System.Int64 | Lange | L |
System.UInt64 | ulong | UL |
System.Double | Dubbele | D |
System.Single | Float | F |
System.Decimal | decimaal | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
BlockExpression
Als het type van een BlockExpression object verschilt van het type van de laatste expressie in het blok, wordt het type weergegeven tussen punthaken (<
en >
). Anders wordt het type object BlockExpression niet weergegeven.
BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
.Block() {
"test"
}
*/
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test"));
/*
.Block<System.Object>() {
"test"
}
*/
LambdaExpression
LambdaExpression objecten worden samen met hun gedelegeerdentypen weergegeven.
Als een lambda-expressie geen naam heeft, wordt er een automatisch gegenereerde naam toegewezen, zoals #Lambda1
of #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
Als u een standaardwaarde voor het LabelExpression object opgeeft, wordt deze waarde weergegeven vóór het LabelTarget object.
Het .Label
token geeft het begin van het label aan. Het .LabelTarget
token geeft de bestemming van het doel aan waar naartoe moet worden gesprongen.
Als een label geen naam heeft, wordt er een automatisch gegenereerde naam toegewezen, zoals #Label1
of #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:
}
*/
Gecontroleerde operators
Gecontroleerde operatoren worden weergegeven met het #
symbool vóór de operator. De ingeschakelde optellingsoperator wordt bijvoorbeeld weergegeven als #+
.
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
*/