c# - 表达式树上的 ToString 产生格式错误的输出

标签 c# expression-trees tostring

当我使用 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/

相关文章:

java - 枚举的 toString 中的默认大小写

c# - ASP.Net MS Chart控件饼图: remove unwanted padding

c# 如何将字节添加到字节数组

c# - 使用忽略重载的 lambda 语法选择方法表达式

linq - where 子句的通用表达式 - "The LINQ expression node type ' Invoke' 在 LINQ to Entities 中不受支持。”

java - 在很多实体中自动生成 toString 方法

java - Java中如何显示对象的内容

c# - 在 C# 中异步发送电子邮件?

c# - .net Entity Framework 与 oracle 11g

c# - 在父表达式中重用表达式结果