2010-01-29 19 views
8

que tienen una expresión de este tipo:cómo obtener nombres de parámetros de un árbol de expresiones?

Expression<Action<T>> expression 

¿Cómo puedo obtener los nombres de los parámetros de esta expresión (opcional: y los valores)?

ejemplo:

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

nombres podrían str_par1, int_par2, obj_par3

+1

¿Qué quieres decir con valores? – jason

+0

por valores quise decir o => o.Método ("valor") // Método (cadena s) s es el nombre – Omu

Respuesta

16
Expression<Action<Thing>> exp = o => o.Method(1, 2, 3); 
var methodInfo = ((MethodCallExpression)exp.Body).Method; 
var names = methodInfo.GetParameters().Select(pi => pi.Name); 
4

Usted puede obtener los nombres de los parámetros de la propiedad Parameters.

Por ejemplo:

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

Para la segunda parte, las expresiones lambda son funciones simplemente no compilados.
Sus parámetros no tienen valores hasta que compile la expresión y llame al delegado con algunos valores.

Si toma la expresión lambda i => i.ToString(), ¿dónde hay algún valor de parámetro?

+1

En realidad quería los nombres de los parámetros del método o => o.Method (par1, par2, par3) – Omu

2

¿Cómo obtengo los nombres de parámetros de esta expresión?

expression.Parameters[0].Name 

Para su referencia en el futuro, la documentación está aquí:

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

(opcional: y los valores)?

Esto no tiene ningún sentido para mí. ¿Puedes explicar a qué te refieres con "y valores"?

+0

por valores quise decir o => o.Método ("valor") // Método (cadena s) s es el nombre – Omu

+0

Realmente quería los nombres de los parámetros del método o => o.Método (par1, par2, par3) – Omu

2

realidad quería los nombres de los parámetros del método o => o.Method (PAR1, PAR2, par3)

Tienes alguna creencia de que estamos psíquico, tal vez .

De todos modos, avanzando.

Realmente quería los nombres de los parámetros del método o => o.Método (PAR1, PAR2, par3)

El nombre del primer parámetro formal es:

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

La expresión que es el primer argumento es

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

Para su referencia en el futuro, la documentación está aquí:

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

Cuestiones relacionadas