实现不在表达式树中,.net 4

sco*_*eep 4 expression-trees .net-3.5 c#-3.0

有可能实现一个!(不)使用表达式树.我有兴趣创建一个C#eval类,它将解析和评估包含true,false,||,&&和!的逻辑表达式.我知道&&和|| 目前.NET 4表达式树支持,但我想知道它们是否是一种实现summat的方法!(x && y)|| z其中z = false,y = true,z = false.

目前,我正在使用基于标准堆栈的标记生成器,解析器,求值程序来评估这些类型的表达式,但如果可以动态创建和执行合适的表达式树,则会很乐意将其转储.

Jon*_*eet 11

我经常发现值得编写一个lambda表达式,它可以完成我想要的,然后看看C#编译器用它做什么.

所以这段代码:

Expression<Func<bool,bool>> func = x => !x;
Run Code Online (Sandbox Code Playgroud)

编译成:

ParameterExpression expression2;
Expression<Func<bool, bool>> expression = 
       Expression.Lambda<Func<bool, bool>>(Expression.Not(
            expression2 = Expression.Parameter(typeof(bool), "x")), 
                new ParameterExpression[] { expression2 });
Run Code Online (Sandbox Code Playgroud)

(对格式化抱歉 - 很难知道如何处理.)

这是用Reflector反编译的,但是在.NET 2.0中设置了"优化"以避免使用lambda语法.

一旦你越过垃圾,你会看到它正在使用Expression.Not.&&使用Expression.AndAlso,和|| 用途Expression.OrElse.