2008-08-26 45 views

回答

6

或者它只是作为传输机制代码有用吗?

对于代码,它作为执行机制很有用。使用interpreter pattern,可以直接解释表达式树。这很有用,因为它实现起来非常简单快捷。这种解释器无处不在,甚至在似乎没有“解释”任何东西的情况下也是如此,例如用于打印嵌套结构。

6

一些单元测试模拟框架利用表达式树来建立强类型的期望/验证。即:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method 
               // SomeMethod was called with 
               // someObject as the argument 

这里,表达式从来没有实际执行,但表达式本身保存有趣的信息。无表达式树的替代办法是

myMock.Verify("SomeMethod", someObject) // we've lost the strong typing 
4

当您需要访问函数逻辑以便以某种方式更改或重新应用它时,表达式树很有用。

LINQ到SQL是一个很好的例子:

//a linq to sql statement 
var recs (
    from rec in LinqDataContext.Table 
    where rec.IntField > 5 
    select rec); 

如果我们没有表达式树本声明将不得不返回所有的记录,然后应用C#,其中的逻辑每个。

随着表达式树该where rec.IntField > 5可以被解析成SQL:

--SQL statment executed 
select * 
from [table] 
where [table].[IntField] > 5 
相关问题