Conversion de l'arbre Lambda en expression

c# expression-trees lambda

Question

Je vais rester très simple,

Comment puis-je obtenir un arbre d'expression en lambda?

ou à partir d'une expression de requête?

Réponse acceptée

Vous devez affecter le lambda à un type différent:

// Gives you a delegate:
Func<int, int> f = x => x * 2;
// Gives you an expression tree:
Expression<Func<int, int>> g = x => x * 2;

Il en va de même pour les arguments de méthode. Cependant, une fois que vous avez affecté une telle expression lambda à un type Func<> , vous ne pouvez pas récupérer l'arborescence d'expression.


Réponse populaire

La réponse de Konrad est exacte. Vous devez affecter l'expression lambda à Expression<Func<...>> pour que le compilateur génère l'arborescence des expressions. Si vous obtenez un lambda en tant que Func<...> , Action<...> ou autre type de délégué, vous disposez uniquement d'un ensemble d'instructions IL.

Si vous avez vraiment besoin de pouvoir reconvertir un lambda compilé en IL en un arbre d’expression, vous devez le décompiler (par exemple, faites ce que fait l’outil Reflector de Lutz Roeder). Je suggérerais de jeter un coup d'œil à la bibliothèque Cecil , qui fournit une prise en charge avancée de la manipulation IL et qui pourrait vous faire économiser beaucoup de temps.




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