从代码中访问Expression.DebugView

Sha*_*mer 4 c# expression-trees

我正在手动创建一个表达式树

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);
Run Code Online (Sandbox Code Playgroud)

当我在调试模式下查看DebugView时,我看到3 +(5 + 9)*2,这是我想从我的程序输出的内容.我知道这是使用表达式树可视化工具.有没有办法在我的代码中使用它?谢谢!

Ben*_*pka 7

这是一个使用反射获取内部属性值的简单扩展方法.

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;
}
Run Code Online (Sandbox Code Playgroud)


Ric*_*key 5

实现调试视图功能的类是有意的,internal这样您就无法在没有反射的情况下访问它们.虽然这似乎不公平,但调试的目的是调试,它不是一个受支持的API,因此可能随时改变,也许是为了改进调试!使用支持的公共API将确保与未来版本的兼容性.

这是使用公共API的另一个StackOverflow问题: