come ottenere i nomi dei parametri da un albero di espressioni?

c# expression-trees

Domanda

Ho un'espressione di questo tipo:

Expression<Action<T>> expression

come ottengo i nomi dei parametri da questa espressione (facoltativo: e valori)?

esempio:

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

i nomi potrebbero essere str_par1, int_par2, obj_par3

Risposta accettata

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

Risposta popolare

È possibile ottenere i nomi dei parametri dalla proprietà Parameters .

Per esempio:

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

Per la seconda parte, le espressioni lambda sono solo funzioni non compilate.
I loro parametri non hanno valori finché non si compila l'espressione e si chiama il delegato con alcuni valori.

Se prendi l'espressione lambda i => i.ToString() , dove sono presenti i valori dei parametri?



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché