2008-08-26 11 views
11

Я полностью понимаю концепцию деревьев выражений, но мне трудно найти ситуации, в которых они полезны. Есть ли конкретный экземпляр, в котором можно использовать деревья выражений? Или это полезно только в качестве транспортного механизма для кода? Я чувствую, что здесь что-то не хватает. Благодаря!Каковы некоторые примеры, в которых используются деревья выражений?

ответ

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