Какой лучший ресурс для углубленного изучения деревьев выражений C #?
-
22-08-2019 - |
Вопрос
Когда я впервые ввел этот вопрос, я сделал это для того, чтобы найти повторяющиеся вопросы, будучи уверенным, что кто-то, должно быть, уже задавал этот вопрос.Мой план состоял в том, чтобы перейти по этим поддельным ссылкам вместо того, чтобы публиковать этот вопрос.Но этот вопрос раньше не задавался , насколько я могу судить ...он не появился в списке "Связанные вопросы".
Каковы некоторые из лучших ресурсов, которые вы нашли (статьи, книги, записи в блогах и т.д.) Для получения более глубокого понимания деревьев выражений в 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, предназначенный для произнесенный редко получается осмысленное самостоятельное чтение.
Какое-нибудь другое чтение (не из блога):
- Джейсон Бок: генетическое программирование с
Expression
- (снова я): универсальные операторы с
Expression
- (и снова, в InfoQ)
Expression
в качестве Компилятора
(и целая куча сообщений здесь и на microsoft.public.dotnet.languages.csharp - попробуйте выполнить поиск по:+expression -регулярное выражение -"регулярное выражение"
Изучите схему.Выражения используют те же принципы, что и лямбда-исчисление, и, следовательно, дадут вам некоторое лучшее представление.
В качестве альтернативы вы можете посмотреть на DLR, который похож, но гораздо менее элегантен.