Сведения о вопросе

Fedya

12:08, 23rd August, 2020

Теги

c#   expression    

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

Просмотров: 400   Ответов: 3

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



  Сведения об ответе

fo_I_K

12:26, 15th August, 2020

Некоторые модульный тест насмешливый рамок использовать выражение деревьев для того, чтобы создать строго типизированный expectations/verifications. т. е.:

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


  Сведения об ответе

9090

12:42, 8th August, 2020

Или он полезен только как механизм переноса кода?

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


  Сведения об ответе

nYU

03:37, 1st August, 2020

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

Linq до SQL-хороший пример:

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

Если бы у нас не было деревьев выражений, это утверждение должно было бы вернуть все записи, а затем применить логику C# where к каждой из них.

С помощью деревьев выражений, которые where rec.IntField > 5 можно разобрать на SQL:

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться