Comment obtenir les noms de paramètres d'un arbre d'expression?

c# expression-trees

Question

J'ai une expression de ce type:

Expression<Action<T>> expression

Comment puis-je obtenir les noms de paramètres de cette expression (facultatif: et valeurs)?

Exemple:

Expression<Action<T>> expression

les noms pourraient être str_par1, int_par2, obj_par3

Réponse acceptée

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

Réponse populaire

Vous pouvez obtenir les noms de paramètre à partir de la propriété Parameters .

Par exemple:

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

Pour la deuxième partie, les expressions lambda ne sont que des fonctions non compilées.
Leurs paramètres n'ont pas de valeurs jusqu'à ce que vous compiliez l'expression et appeliez le délégué avec certaines valeurs.

Si vous prenez l'expression lambda i => i.ToString() , où y a-t-il des valeurs de paramètre?




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi