Обновленная ссылка для Ganymede (Eclipse 3.4):
http://help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.user/concepts/cprbview.htm
, Но я соглашаюсь с фундаментальной проблемой: проблемы просматривают фильтрацию потребностей по Ресурсу, не просто Описание.
В моем случае, я включаю сгенерированный код jsp в свой исходный путь, и существуют все виды предупреждения, которые происходят в * _jsp.java файлы (как неиспользованное приложение, страница, конфигурация, page_context переменные). Таким образом, было бы хорошо исключить их шаблоном Ресурса. (Или для jspc для не записи неиспользованного кода..., но это - другой вопрос в целом).
Дерево выражений представляет собой дерево синтаксиса одного выражения.
Каждый узел дерева представляет некоторую константу, ссылку на член объекта или операцию.
Например, для выражения 2 + 3
мы можем построить и дерево выражений:
Expression.MakeBinary(
ExpressionType.Add,
Expression.Constant(2),
Expression.Constant(3));
Наиболее важным из таких деревьев является Выражение что позволяет записывать выражения в удобочитаемой форме, напоминающей лямбда-функции сопоставления подписи TDelegate. Вот пример ex
Expression<Func<int>> sum = () => 2 + 3; // much nicer, eh?
, но Expression не является делегатом, так как он не может быть выполнен напрямую.
Вместо этого по нему можно пройти, например, с помощью объекта посетителя для построения некоторого исполняемого представления. Примерами могут быть сборка делегата с помощью Expression.Compile () или запрос SQL, построенный из запроса LINQ с использованием CompiledQuery.Compile () и т. Д.
Еще одно полезное применение деревьев выражений - их использование для представления членов объектов, которые в противном случае потребовали бы использования Reflection. Отражение использует строки для представления имен членов и не выполняет никаких проверок во время компиляции. Деревья выражений проверяются, поэтому можно сделать немного меньше ошибок.
PropertyInfo prop1 = typeof(MyClass).GetProperty("Value");
Expression<Func<MyClass, int>> expr = mc => mc.Value;
PropertyInfo prop2 = (mc.Body as MemberExpression).Member as PropertyInfo;
Выражение
- это универсальный способ выражения операций кода в виде объектной модели. Это намного больше расширено в 4.0, но в этой области я использую лот ; У меня есть несколько статей здесь , или еще одна попытка объяснить все это в InfoQ . Я также представлял эту тему несколько раз - возможно, попробуйте загрузить здесь (но без слов это не будет иметь такого большого смысла; извините).
Буду честен; это не простой предмет - но он чрезвычайно , когда вы его ощупываете. Исходя из вышесказанного, я бы, наверное, начал с InfoQ.
Это намного больше расширено в 4.0, но в этой области я использую лот ; У меня есть несколько статей здесь , или еще одна попытка объяснить все это в InfoQ . Я также представлял эту тему несколько раз - возможно, попробуйте загрузить здесь (но без слов это не будет иметь такого большого смысла; извините).Буду честен; это не простой предмет - но он чрезвычайно , когда вы его ощупываете. Исходя из вышесказанного, я бы, наверное, начал с InfoQ.
Это намного больше расширено в 4.0, но в этой области я использую лот ; У меня есть несколько статей здесь , или еще одна попытка объяснить все это в InfoQ . Я также представлял эту тему несколько раз - возможно, попробуйте загрузить здесь (но без слов это не будет иметь такого большого смысла; извините).Буду честен; это не простой предмет - но он чрезвычайно , когда вы его ощупываете. Исходя из вышесказанного, я бы, наверное, начал с InfoQ.
не имеет такого же смысла без слов; извините).Буду честен; это не простой предмет - но он чрезвычайно , когда вы его ощупываете. Исходя из вышесказанного, я бы, наверное, начал с InfoQ.
не имеет такого же смысла без слов; извините).Буду честен; это не простой предмет - но он чрезвычайно , когда вы его ощупываете. Исходя из вышесказанного, я бы, наверное, начал с InfoQ.
Вот статья , которая объясняет основы ...
Вкратце:
1) В принципе, да, это представление логики в памяти.
2) Его можно скомпилировать в MSIL (или, как в случае LINQ-to-SQL, также и в другие языки).
3) Делегаты Func <> используются, потому что они используются для представления выражения как вызываемой функции (которая внутренне компилируется как MSIL).
Я не эксперт в этом вопросе, но постараюсь расчистить путь.
Думайте о деревьях выражений как о типизированном отражении. Это простой способ узнать, что имеет функция, например, что такое операнд, параметры и прочее.
Итак,
1) Я бы сказал, да.
2) Не совсем ... вы должны сначала изучить эту функцию (я тоже), а затем найти, для чего она нужна. Вы генерируете код? что для меня может быть очень полезной функцией деревьев выражений
3) Дерево выражений - это новая функция, но вы ничего не могли сделать раньше. Теперь это просто.
Я попытался ответить на такие же вопросы, как ваш, в блоге C # FAQ в следующем сообщении блога: Создание динамических методов с помощью деревьев выражений в Visual Studio 2010 . Так что да, это в памяти. Я не понимаю, что вы имеете в виду под «определяемыми пользователем шаблонами», но вы можете использовать его для написания динамического кода. И нет, вы не можете заменить ET делегатами, потому что вы не можете изменять делегатов во время выполнения. Единственной заменой может быть MSIL, который гораздо труднее читать и писать.