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

У меня есть выражение этого типа:

Expression<Action<T>> expression

как делают я получаю имена параметров от этого выражения (дополнительный: и значения)?

пример:

o => o.Method("value1", 2, new Object());

имена могли быть str_par1, int_par2, obj_par3

9
задан Eric Lippert 29 January 2010 в 17:05
поделиться

5 ответов

Expression<Action<Thing>> exp = o => o.Method(1, 2, 3);
var methodInfo = ((MethodCallExpression)exp.Body).Method;
var names = methodInfo.GetParameters().Select(pi => pi.Name);
17
ответ дан 4 December 2019 в 07:47
поделиться

Параметры для метода ? Получите MethodInfo из выражения (на предположение, методика MethodCALLExpression.method ), а затем используют MODICBASE. GTEPPRAMMETERSE () , чтобы получить параметры. ( PARAMETERINFO имеет различные полезные свойства, в том числе имя ).

3
ответ дан 4 December 2019 в 07:47
поделиться

Как получить имена параметров из этого выражения?

expression.Parameters[0].Name

Для вашей будущей ссылки Документация здесь:

http://msdn.microsoft.com/en-us /library/bb359453.aspx

(optional: и ценности)?

Это не имеет никакого смысла для меня. Можете ли вы объяснить, что вы подразумеваете под «и ценностями»?

2
ответ дан 4 December 2019 в 07:47
поделиться

Я фактически хотел названия параметров метода O => O.Method (par1, par2, par3)

У вас есть некоторое убеждение, что мы психическими, возможно.

Во всяком случае, двигаться дальше.

Я на самом деле хотел названия параметров метода O => O.Method (par1, par2, par3)

Имя первого формального параметра:

(expression.Body as MethodCallExpression).Method.GetParameters()[0].Name

Выражение, которое является первым аргументом

(expression.Body as MethodCallExpression).Arguments[0]

Для вашей будущей ссылки в документации здесь:

http://msdn.microsoft.com/en-us/library/system.linq.expressions.methodcallexpression.arguments.aspx

2
ответ дан 4 December 2019 в 07:47
поделиться

Если у вас есть какие-либо проекты типа «домашних животных» (проекты, на которые ваша компания никогда не сможет оправдать трату времени, но будут полезными и довольно простыми), я бы дал им это.

Это был бы хороший способ начать изучать материал, так как это реальная работа (всегда труднее научиться чему-то, и запомнить материал, если это просто примерная программа, а не что-то на самом деле полезное). Это будет хорошим началом для того, чтобы научиться использовать Google для вопросов/учебных пособий, и построить отношения с вашей командой, задавая вопросы. Оттуда они должны иметь достаточно приличный фон, чтобы начать работать над фактическими приложениями.

Если проект домашних животных достаточно мал, возможно, потребуется повторно посетить приложение в конце стажировки, чтобы перезаписать/улучшить приложение. Они, вероятно, удивятся тому, что они получили в ходе стажировки

-121--2953946-

Начните с определения областей легкой и средней сложности и четкого определения цели для каждой задачи. Дайте им представление о бизнесе/области, чтобы они понимали, как все сочетается. После выполнения задачи попросите его рассмотреть ее у разработчика, работающего в течение полного рабочего времени, чтобы убедиться, что она соответствует требованиям, и выявить любые слабые области, в которых можно использовать лучшие практики (это предоставляет возможность наставничества/образования).

Что вы не хотите, так это посылать их без кодирования кучу вещей, а затем обнаруживать, что код не в порядке. Что касается базы данных, будьте осторожны. Ограничить разрешения (т. е. woops, я не хотел DELETE / DROP that!) или, надеюсь, у вас есть выделенная среда разработчика, где все плохо не разрушительно для восстановления. Возможно, побочный проект с образцом базы данных для тестирования перед включением работы обратно в фактическую среду.

-121--2953947-

Имена параметров можно получить из свойства Parameters .

Например,

    Expression<Action<string, int>> expr = (a, b) => (a + b).ToString();
var names = expr.Parameters.Select(p => p.Name);  //Names contains "a" and "b"

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

Если взять лямбда-выражение i = > i.ToString () , где есть значения параметров?

4
ответ дан 4 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: