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,这是我想从我的程序输出的内容.我知道这是使用表达式树可视化工具.有没有办法在我的代码中使用它?谢谢!
这是一个使用反射获取内部属性值的简单扩展方法.
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)
实现调试视图功能的类是有意的,internal这样您就无法在没有反射的情况下访问它们.虽然这似乎不公平,但调试的目的是调试,它不是一个受支持的API,因此可能随时改变,也许是为了改进调试!使用支持的公共API将确保与未来版本的兼容性.
这是使用公共API的另一个StackOverflow问题: