Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A DebugView tulajdonság (amely csak hibakereséskor érhető el) a kifejezésfák sztring renderelését biztosítja. A szintaxis nagy része meglehetősen könnyen érthető; a különleges eseteket a következő szakaszok ismertetik.
Minden példát egy blokkkommentár követ, amely a DebugView-t tartalmazza.
ParameterExpression
ParameterExpression a változónevek az elején egy $ szimbólummal jelennek meg.
Ha egy paraméternek nincs neve, automatikusan generált nevet kap, például $var1 vagy $var2.
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
/*
$num
*/
ParameterExpression numParam = Expression.Parameter(typeof(int));
/*
$var1
*/
ConstantExpression
Azoknál az objektumoknál, amelyek egész számértékeket, sztringeket és ConstantExpression reprezentálnak, null az állandó értéke jelenik meg.
A C# literálként szabványos utótagokkal rendelkező numerikus típusok esetében a rendszer hozzáadja az utótagot az értékhez. Az alábbi táblázat a különböző numerikus típusokhoz társított utótagokat mutatja be.
| típus | Kulcsszó | Toldalék |
|---|---|---|
| System.UInt32 | előjelnélküli egész | U |
| System.Int64 | hosszú | L |
| System.UInt64 | ulong | UL |
| System.Double | dupla | D |
| System.Single | úszik | F |
| System.Decimal | decimális | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
BlockExpression
Ha egy BlockExpression objektum típusa eltér a blokk utolsó kifejezésének típusától, a típus szögletes zárójelben (< és >) jelenik meg. Ellenkező esetben az BlockExpression objektum típusa nem jelenik meg.
BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
.Block() {
"test"
}
*/
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test"));
/*
.Block<System.Object>() {
"test"
}
*/
LambdaExpression
LambdaExpression az objektumok a delegált típusokkal együtt jelennek meg.
Ha a lambda kifejezés nem rendelkezik névvel, akkor a rendszer automatikusan generált nevet rendel hozzá, például #Lambda1 vagy #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
Ha alapértelmezett értéket ad meg az LabelExpression objektumhoz, ez az érték az objektum előtt LabelTarget jelenik meg.
A .Label token a címke elejét jelzi. A .LabelTarget token jelzi az ugrási cél helyét.
Ha egy címke nem rendelkezik névvel, automatikusan generált nevet kap, például #Label1 vagy #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:
}
*/
Ellenőrzött operátorok
Az ellenőrzött operátorok az # operátor előtt lévő szimbólummal jelennek meg. Az ellenőrzött összeadási operátor például a következőként #+jelenik meg: .
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
*/