2008-08-26 42 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 
相關問題