Каковы некоторые экземпляры, в которых деревья выражений полезны?

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

11
задан Lucas - Better Coding Academy 4 December 2012 в 08:41
поделиться

3 ответа

Или действительно ли это только полезно как транспортный механизм для кода?

Это полезно как механизм выполнения для кода. Используя шаблон интерпретатора, могут непосредственно быть интерпретированы деревья выражений. Это полезно, потому что это очень легко и быстро для реализации. Такие интерпретаторы повсеместны и используются даже в случаях, которые, кажется, ничего не “интерпретируют”, например, для печати вложенных структур.

6
ответ дан 3 December 2019 в 07:15
поделиться

Некоторые платформы насмешки модульного теста используют деревья выражений для установки ожиданий/проверок со строгим контролем типов. Т.е.:

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
7
ответ дан 3 December 2019 в 07:15
поделиться

Деревья выражений полезны, когда Вам нужно к логике функции доступа, чтобы изменить или повторно применить ее в некотором роде.

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
4
ответ дан 3 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: