【发布时间】:2014-06-19 17:29:53
【问题描述】:
当我使用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", "||")
但这有明显的弱点,看起来很尴尬。 此外,我不想仅仅为了获得正确的格式而创建一个大的“替换”部分或巨大的正则表达式树。
有没有一种简单的方法来获得类似代码的人类可读形式的表达式树?
【问题讨论】:
-
由于表达式不是 C# 特定的,我不知道有另一种方法让它输出 C#-exact 语法。我认为最好的方法是确实使用
String.Replace方法。如果您担心类似的变量名称可能出现误报,请尝试与周围的空格匹配.Replace(" AndAlso ", " && ")编辑:关于为什么您正在寻找替代品,只需将此转换行为放入共享实用程序方法。这样,如果您需要添加一个新的Replace,您可以在一个地方完成。
标签: c# expression-trees tostring