当我使用 Expression.ToString()
将表达式树转换为人类可读的形式时,结果如下所示:
x => ((x.ID > 2) OrElse (x.ID != 6))
x => ((x.ID > 2) AndAlso (x.ID != 6))
理想情况下,我希望输出显示运算符而不是“OrElse”和“AndAlso”:
x => ((x.ID > 2) || (x.ID != 6))
x => ((x.ID > 2) && (x.ID != 6))
作为解决方法,我可以使用 string.Replace()
方法..
.Replace("AndAlso", "&&")
.Replace("OrElse", "||")
但这有明显的弱点并且看起来很尴尬。 此外,我不想仅仅为了获得正确的格式而创建一个大的“替换”部分或巨大的正则表达式树。
是否有一种简单的方法来获得类似代码的人类可读形式的表达式树?
最佳答案
不幸的是,正确执行此操作的最简单方法是编写您自己的 ExpressionVisitor
类,该类生成 C# 格式的输出代码。
最简单的方法是使用 ExpressionStringBuilder以引用源为起点并对其进行调整,直到您对输出结果感到满意为止。
关于c# - 表达式树上的 ToString 产生格式错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438154/