Lambda a la conversión del árbol de expresión

c# expression-trees lambda

Pregunta

Lo mantendré muy simple,

¿Cómo obtengo el árbol de expresiones de lambda?

o de la expresión de consulta?

Respuesta aceptada

Debe asignar la lambda a un tipo diferente:

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

Lo mismo ocurre con los argumentos de método. Sin embargo, una vez que haya asignado dicha expresión lambda a un tipo Func<> , no podrá recuperar el árbol de expresiones.


Respuesta popular

La respuesta de Konrad es exacta. Debe asignar la expresión lambda a Expression<Func<...>> para que el compilador genere el árbol de expresiones. Si obtiene un lambda como Func<...> , Action<...> u otro tipo de delegado, todo lo que tiene es un montón de instrucciones de IL.

Si realmente necesitas poder convertir un lambda compilado por IL nuevamente en un árbol de expresiones, deberías descompilarlo (por ejemplo, haz lo que hace la herramienta Reflector de Lutz Roeder). Le sugiero que eche un vistazo a la biblioteca de Cecil , que proporciona asistencia avanzada para la manipulación de IL y podría ahorrarle bastante tiempo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow