Zugreifen auf Expression.DebugView aus Code

c# expression-trees

Frage

Ich erstelle einen Ausdrucksbaum manuell so

var innerAddition = Expression.Add(Expression.Constant(5), Expression.Constant(9));
var mult = Expression.Multiply(innerAddition, Expression.Constant(2));
var top = Expression.Add(Expression.Constant(3), mult);

Wenn ich DebugView im Debug-Modus anschaue, sehe ich 3 + (5 + 9) * 2, was ich aus meinem Programm ausgeben möchte. Ich verstehe, dass dies den Ausdruck Tree Visualizer verwendet. Gibt es eine Möglichkeit, dies aus meinem Code zu verwenden? Vielen Dank!

Akzeptierte Antwort

Die Klassen, die die Debug-Ansichtsfunktionen implementieren, sind absichtlich internal sodass Sie nicht ohne Reflektion darauf zugreifen können. Obwohl dies unfair erscheint, ist der Zweck des Debuggens das Debuggen, und es ist nicht als eine unterstützte API gedacht und könnte daher jederzeit geändert werden, vielleicht um das Debuggen zu verbessern! Die Verwendung der unterstützten öffentlichen APIs stellt die Kompatibilität mit zukünftigen Versionen sicher.

Hier ist eine weitere StackOverflow-Frage, die die öffentlichen APIs verwendet:


Beliebte Antwort

Hier ist eine einfache Erweiterungsmethode, um den Wert der internen Eigenschaft mithilfe der Reflektion zu erhalten.

public static string GetDebugView(this Expression exp)
{
    if (exp == null)
        return null;

    var propertyInfo = typeof(Expression).GetProperty("DebugView", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(exp) as string;
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow