首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么用表达式树生成两个谓词以下的委托

2013-03-13 
如何用表达式树生成两个谓词以上的委托如何用表达式树生成Funcint,bool f (p){ return p0 && p9 |

如何用表达式树生成两个谓词以上的委托
如何用表达式树生成


Func<int,bool> f = (p)=>{ return p>0 && p<9 || p==12};

这样的委托?
Expression.And 只能传入两个条件,我想一次传入两个以上的条件 。
[解决办法]
  var par = Expression.Parameter(typeof(int), "p");
            var left = Expression.AndAlso(Expression.GreaterThan(par, Expression.Constant(0)), Expression.LessThan(par, Expression.Constant(9)));
            var right = Expression.Equal(par, Expression.Constant(23));
            var s = Expression.Lambda(Expression.OrElse(left, right), par);
            Console.WriteLine((s.Compile() as Func<int,bool>)(2));

[解决办法]
引用:
引用:
引用:引用:
唉!这是一个基本的离散数学概念。假设A+B得到的也是闭包,那么(A+B)+C也是。
如果操作符是恒定这样是没问题,但我  p>0 &amp;amp;amp;&amp;amp;amp; p<9 
[解决办法]
 p==12 的操符是变动的。
我只是举一个例子,我想实现的是生成出来的表达式就……

带括号和不带括号只是人类阅读上的区别而已,事实上表达式树根本没有括号。

如果你愿意,你也可以画一个树或者用一个TreeView表示这个表达式。你可以做一个实验,在程序里面写(a+b)+c,或者(((a))+((((b)))))+c然后编译,再反编译,出来的都是a+b+c。也就是说,你没有办法从一个编译好的程序(或者一个表达式树)中分别源代码中你到底有没有写括号,因为这些写法产生的结果都是完全一样的。

热点排行