Debuggen von Ausdrucksbäumen in Visual Studio (C#)

Sie können die Struktur und den Inhalt von Ausdrucksbaumstrukturen beim Debuggen Ihrer Anwendung analysieren. Um einen schnellen Überblick über die Ausdrucksbaumstruktur zu erhalten, können Sie die DebugView-Eigenschaft verwenden, die nur im Debugmodus verfügbar ist. Weitere Informationen zum Debugging finden Sie unter Debuggen in Visual Studio.

Die DebugView-Eigenschaft stellt den Inhalt von Ausdrucksbaumstrukturen mithilfe von Visual Studio-Schnellansichten übersichtlicher dar. Weitere Informationen finden Sie unter Create Custom Visualizers (Erstellen benutzerdefinierter Schnellansichten).

So öffnen Sie eine Schnellansicht für eine Ausdrucksbaumstruktur

  1. Klicken Sie auf das Lupensymbol, das in DataTips neben der DebugView-Eigenschaft einer Ausdrucksbaumstruktur, neben einem Überwachungsfenster, einem Auto- oder neben einem Lokalfenster angezeigt wird.

    Eine Liste von Schnellansichten wird angezeigt.

  2. Klicken Sie auf die gewünschte Schnellansicht.

Jeder Ausdruckstyp wird in der Schnellansicht angezeigt, wie in den folgenden Abschnitten beschrieben.

ParameterExpressions

Namen von <xref:System.Linq.Expressions.ParameterExpression>-Variablen werden mit einem „$“-Symbol am Anfang angezeigt.

Wenn ein Parameter nicht über einen Namen verfügt, wird ihm ein automatisch generierter Name zugewiesen, z.B. $var1 oder $var2.

Beispiele

Ausdruck DebugView-Eigenschaft
ParameterExpression numParam = Expression.Parameter(typeof(int), "num"); $num
ParameterExpression numParam = Expression.Parameter(typeof(int)); $var1

ConstantExpressions

Für <xref:System.Linq.Expressions.ConstantExpression>-Objekte, die ganzzahlige Werte, Zeichenfolgen und null darstellen, wird der Wert der Konstante angezeigt.

Für numerische Typen, die über Standardsuffixe als C#-Literale verfügen, wird das Suffix zum Wert hinzugefügt. Die folgende Tabelle zeigt die verschiedenen numerischen Typen und ihre zugeordneten Suffixe.

Typ Suffix
<xref:System.UInt32> U
<xref:System.Int64> L
<xref:System.UInt64> UL
<xref:System.Double> D
<xref:System.Single> F
<xref:System.Decimal> M

Beispiele

Ausdruck DebugView-Eigenschaft
int num = 10; ConstantExpression expr = Expression.Constant(num); 10
double num = 10; ConstantExpression expr = Expression.Constant(num); 10D

BlockExpression

Wenn sich der Typ eines <xref:System.Linq.Expressions.BlockExpression>-Objekts vom Typ des letzten Ausdrucks im Block unterscheidet, wird der Typ in der DebugInfo-Eigenschaft in spitzen Klammern (< und >) angezeigt. Andernfalls wird der Typ des <xref:System.Linq.Expressions.BlockExpression>-Objekts nicht angezeigt.

Beispiele

Ausdruck DebugView-Eigenschaft
BlockExpression block = Expression.Block(Expression.Constant("test")); .Block() {

"test"

}
BlockExpression block = Expression.Block(typeof(Object), Expression.Constant("test")); .Block<System.Object>() {

"test"

}

LambdaExpression.

<xref:System.Linq.Expressions.LambdaExpression>-Objekte werden zusammen mit ihren Delegattypen angezeigt.

Wenn ein Lambda-Ausdruck über keinen Namen verfügt, wird ihm ein automatisch generierter Name zugewiesen, z.B. #Lambda1 oder #Lambda2.

Beispiele

Ausdruck DebugView-Eigenschaft
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 <xref:System.Linq.Expressions.LabelExpression>-Objekt angeben, wird dieser Wert vor dem <xref:System.Linq.Expressions.LabelTarget>-Objekt angezeigt.

Das .Label-Token gibt den Anfang der Bezeichnung an. Das .LabelTarget-Token gibt den Zielort an, zu dem gewechselt werden soll.

Wenn eine Bezeichnung nicht über einen Namen verfügt, wird ihr ein automatisch generierter Name zugewiesen (z.B. #Label1 oder #Label2).

Beispiele

Ausdruck DebugView-Eigenschaft
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(target5), Expression.Label(target5)); .Block() {

.Goto #Label1 { };

.Label

.LabelTarget #Label1:

}

Überprüfte Operatoren

Überprüften Operatoren wird in der Ansicht das Symbol "#" vorangestellt. Der überprüfte Additionsoperator wird z.B. als #+ angezeigt.

Beispiele

Ausdruck DebugView-Eigenschaft
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

Siehe auch

Ausdrucksbaumstrukturen (C#)
Debuggen in Visual Studio
Erstellen benutzerdefinierter Schnellansichten