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

StackOverflow https://stackoverflow.com/questions/683620

Вопрос

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

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

Примечание:Я не говорю о лямбда-выражениях.Я говорю о самовыражении< T > и все то, что сопутствует этому и проистекает из этого.

Спасибо.

Это было полезно?

Решение

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

Еще одним замечательным ресурсом является Блог Барта Де Смета

Кроме того, следите за MSDN, примером кода для создания Простая привязка к базе данных (автор Педрам Резаи) собирается выпустить около 40 страниц документа, объясняющего это.

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

Вы также должны узнать как можно больше о посетителях дерева выражений, есть довольно хороший базовый класс 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 в DDD Юго - Запад в мае (и прошлой ночью, но слишком поздно ;-p).Я мог бы опубликовать слайд-деку и некоторые ссылки из связанных статей, если вы хотите...к сожалению, pptx, предназначенный для произнесенный редко получается осмысленное самостоятельное чтение.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top