Каков наилучший ресурс для углубленного изучения деревьев выражений C#?


когда я впервые набрал этот вопрос, я сделал это для того, чтобы найти дубликаты вопросов, чувствуя себя уверенным, что кто-то уже задал этот вопрос. Мой план состоял в том, чтобы следовать этим обманутым ссылкам, а не публиковать этот вопрос. Но этот вопрос, насколько я вижу, раньше не задавался ... он не появился в списке" связанные вопросы".

Каковы некоторые из лучших ресурсов, которые вы нашли (статьи, книги, сообщения в блогах и т. д.) для углубленного понимание деревьев выражений в C#? Я продолжаю удивляться их возможностям, и теперь я нахожусь в точке, где я говорю: "Хорошо, хватит удивляться. Я хочу остановиться прямо сейчас и получить докторскую степень в этих вещах."Я ищу материал, который систематически, методично охватывает возможности, а затем проходит через подробные примеры того, что вы можете с ними сделать.

примечание: Я не говорю о лямбда-выражения. Я говорю о выражении и всех вещах, которые пойти с ним и возникать из него.

спасибо.

3 52

3 ответа:

Глава 11 (внутри деревьев выражений) и Глава 12 (расширение Linq) программирования Microsoft Linq (ISBN 13: 978-0-7356-2400-9 или ISBN 10: 0-7356-2400-3) была неоценима для меня. Я не читал книгу Джона, но он качественный парень и хорошо объясняет вещи, поэтому я предполагаю, что его освещение также будет хорошим.

еще один отличный ресурс блог Барта де смета

кроме того, следите за MSDN, пример кода для построения простой Linq to База данных (по Pedram Rezaei) собирается получить около 40 страниц Doco, объясняющих это.

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

вы также должны узнать как можно больше о посетителях дерева выражений, есть довольно хороший базовый класс inplementation здесь.

вот пример кода производный от этого класса Visitor, чтобы выполнить некоторую отладку (я основал это на некотором примере кода в книге, которую я упомянул), вызов метода prependIndent-это просто метод расширения в строке, чтобы поместить "--" на каждом уровне отступа.

  internal class DebugDisplayTree : ExpressionVisitor
  {
    private int indentLevel = 0;

    protected override System.Linq.Expressions.Expression Visit(Expression exp)
    {
      if (exp != null)
      {
        Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel));
      }
      indentLevel++;
      Expression result = base.Visit(exp);
      indentLevel--;
      return result;
    }
    ...

Я не утверждаю, что они являются всеобъемлющими, но у меня есть ряд Expression посты мой блог. Если вы находитесь в Великобритании, я также буду представлять сессию на Expression at DDD Юго-Запад в мае (и вчера вечером, но слишком поздно ; - p). Я мог бы опубликовать слайд-Деку и некоторые ссылки из связанных статей, если вы хотите... к сожалению, pptx предназначен для говорил редко делает разумное автономное чтение.

некоторые другое чтение (не из блога):

(и целый груз сообщений здесь и на microsoft.общественный.dotnet ограничителя.языки.используется CSharp - попробуйте найти: + выражение-регулярное выражение - "регулярное выражение"

Изучайте Схемы. Выражения используют те же принципы, что и лямбда-исчисление, и, следовательно, дадут вам некоторое лучшее представление.

в качестве альтернативы, вы можете посмотреть на DLR, который является похожим, но гораздо менее элегантным.