在使用ExpressionVisitor
时,我遇到了冗余的布尔表达式。
假设我们有这个:
1. x=> x.IsBool == true
2. x=> x.IsBool != true
3. x=> x.IsBool
4. x=> !x.IsBool
5. x=> x.IsBool && x.IsBool == true
1和2工作正常,因为它们是BinaryExpressions,左侧为MemberExpression
,右侧为ConstantExpression
案例4也起作用,因为我可以检测它是否是UnaryExpression(!)类型并将其转换为带有NotEqal左侧部分并评估右侧部分的BinaryExpression
问题是表达式3和表达式5。
进出口。 3只是一个成员,我怎么能理解这是一个冗余的布尔值而不仅仅是其他东西?在MemberVisitor
里面我只有一个成员,而不是更多。
浓淡5 - 是最大的问题。即使我以某种方式解决了exp的问题。 3,如何区分成员与左冗余部分和成员与普通布尔表达式?
我希望最终的转换是这样的:IsBool = 1 AND IsBool == 1 == 1
(我访问并评估2次MemberExpression
并将其转换为BinaryExression
。
感谢