我已經使用表達式來構建一個微不足道的域特定語言。這在我工作的實際應用中使用,所以它不是玩具項目。
我基本上創建了一個流暢的界面,可以讓我建立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