Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Die DebugView-Eigenschaft (nur beim Debuggen verfügbar) stellt ein Zeichenfolgenrendering von Ausdrucksstrukturen bereit. Die meisten Syntaxen sind recht einfach zu verstehen; die Sonderfälle werden in den folgenden Abschnitten beschrieben.
Jedes Beispiel folgt einem Blockkommentar, der die DebugView enthält.
ParameterExpression
ParameterExpression Variablennamen werden am Anfang mit einem $ Symbol angezeigt.
Wenn ein Parameter keinen Namen hat, wird ihm automatisch ein generierter Name wie $var1 oder $var2 zugewiesen.
ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
/*
$num
*/
ParameterExpression numParam = Expression.Parameter(typeof(int));
/*
$var1
*/
ConstantExpression
Bei ConstantExpression Objekten, die ganze Zahlen, Zeichenfolgen und nullZeichenfolgen darstellen, wird der Wert der Konstanten angezeigt.
Bei numerischen Typen mit Standardsuffixen als C#-Literale wird das Suffix dem Wert hinzugefügt. In der folgenden Tabelle sind die Suffixe aufgeführt, die verschiedenen numerischen Typen zugeordnet sind.
| Typ | Schlüsselwort | Nachsilbe |
|---|---|---|
| System.UInt32 | U | |
| System.Int64 | lange | L |
| System.UInt64 | ulong | UL |
| System.Double | doppelt | D |
| System.Single | schweben | F |
| System.Decimal | dezimal | M |
int num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10
*/
double num = 10;
ConstantExpression expr = Expression.Constant(num);
/*
10D
*/
BlockExpression
Wenn sich der Typ eines BlockExpression Objekts vom Typ des letzten Ausdrucks im Block unterscheidet, wird der Typ in winkeln Klammern (< und >) angezeigt. Andernfalls wird der Objekttyp BlockExpression nicht angezeigt.
BlockExpression block = Expression.Block(Expression.Constant("test"));
/*
.Block() {
"test"
}
*/
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test"));
/*
.Block<System.Object>() {
"test"
}
*/
LambdaExpression
LambdaExpression Objekte werden zusammen mit den Stellvertretungstypen angezeigt.
Wenn ein Lambda-Ausdruck keinen Namen hat, wird ihm ein automatisch generierter Name zugewiesen, wie z.B. #Lambda1 oder #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
Wenn Sie einen Standardwert für das LabelExpression Objekt angeben, wird dieser Wert vor dem LabelTarget Objekt angezeigt.
Das .Label Token gibt den Anfang der Bezeichnung an. Das .LabelTarget-Token gibt das Ziel an, zu dem gesprungen werden soll.
Wenn ein Etikett keinen Namen hat, wird ihm ein automatisch generierter Name zugewiesen, wie z. B. #Label1 oder #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:
}
*/
Überprüfte Operatoren
Markierte Operatoren werden mit dem # Symbol vor dem Operator angezeigt. Beispielsweise wird der geprüfte Additionsoperator als #+ angezeigt.
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
*/