ExpressionVisitor:检测冗余布尔表达式

时间:2016-06-10 13:10:44

标签: c# asp.net .net linq lambda

在使用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。 感谢

0 个答案:

没有答案