我已经使用表达式来构建一个微不足道的域特定语言。这在我工作的实际应用中使用,所以它不是玩具项目。
我基本上创建了一个流畅的界面,可以让我建立Predicate<T>
代表,是这样的:
Predicate<MyClass> condition = (new ConditionBuilder()).GreaterThanConst(9)
.And()
.LessThanConst(4)
.ToPredicate();
每个方法都增加了相关表达到当前的树。比ToPredicate
编译表达式到委托。
的GreaterThanConst
方法看起来是这样的:(?成长)
public ConditionBuilder GreaterThan(object constant)
{
condition = Expression.GreaterThan(Expression.Parameter(constant.GetType()), Expression.Constant(constant));
return this;
}
哪里condition
是持有多数民众赞成在建的树中的成员。
要分析你的表情,你需要写类似:
Expression<Func<YourClass, bool>> expr = x => x.Process == "On" && x.Name == "Goofy";
那么你可以看看,虽然已生成并看看有什么有表达式树。
感谢你为这个......嗯,是的,我没有想象像扩展 公共静态布尔吧(这个富富,表达>表达式) { ... } 然后查看表达式树,计算false或true,然后返回。 我在正确的轨道上吗? –
Janus007
2010-10-20 23:13:27
我不知道为什么你需要一个表达式树。如果你打算做的只是返回结果,那么传递它自己的'Func'会更有意义。 – 2010-10-21 08:31:51
我受到以下启发: \t NServiceBus.Configure.With()。Log4Net(a => a。YourProperty =“value”); 设置这样的属性:) – Janus007 2010-10-21 08:49:24