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.