Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Egenskapen DebugView (endast tillgänglig vid felsökning) innehåller en strängåtergivning av uttrycksträd. Det mesta av syntaxen är ganska enkelt att förstå; specialfallen beskrivs i följande avsnitt.
Varje exempel följs av en blockkommentare som innehåller Felsökningsvyn.
Parameteruttryck
ParameterExpression variabelnamn visas med en $ symbol i början.
Om en parameter inte har något namn tilldelas den ett automatiskt genererat namn, till exempel $var1 eller $var2.
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
/*
$num
*/
ParameterExpression numParam = Expression.Parameter(typeof(int));
/*
$var1
*/
ConstantExpression
För ConstantExpression objekt som representerar heltalsvärden, strängar och nullvisas värdet för konstanten.
För numeriska typer som har standardsuffix som C#-literaler läggs suffixet till i värdet. I följande tabell visas de suffix som är associerade med olika numeriska typer.
| Typ | Nyckelord | ändelse |
|---|---|---|
| System.UInt32 | uint | U |
| System.Int64 | lång | L |
| System.UInt64 | ulong | UL |
| System.Double | dubbel | D |
| System.Single | sväva | F |
| System.Decimal | decimal | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
BlockExpression
Om typen av ett BlockExpression objekt skiljer sig från typen av det sista uttrycket i blocket visas typen inom vinkelparenteserna (< och >). Annars visas inte objektets BlockExpression typ.
BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
.Block() {
"test"
}
*/
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test"));
/*
.Block<System.Object>() {
"test"
}
*/
LambdaExpression
LambdaExpression objekt visas tillsammans med deras ombudstyper.
Om ett lambda-uttryck inte har något namn tilldelas det ett automatiskt genererat namn, till exempel #Lambda1 eller #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
Om du anger ett standardvärde för LabelExpression objektet visas det här värdet före objektet LabelTarget .
Token .Label anger början av etiketten. Token .LabelTarget anger målets mål att hoppa till.
Om en etikett inte har något namn tilldelas den ett automatiskt genererat namn, till exempel #Label1 eller #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:
}
*/
Kontrollerade operatorer
Kontrollerade operatörer visas med symbolen # före operatören. Till exempel visas den markerade additionsoperatorn som #+.
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
*/