2012-04-04 21 views
65

Acabo de encontrar el concepto de árboles de expresión que he escuchado muchas veces. Solo quiero entender qué significa un árbol de expresiones y su propósito.¿Qué son los árboles de expresión, cómo los usa y por qué los usaría?

Me encantaría que alguien también me pudiera dirigir a explicaciones simples y muestras de uso.

+1

posible duplicado de [¿Por qué utilizar la expresión > en lugar de Func ?] (Http://stackoverflow.com/questions/793571/why-would-you-use-expressionfunct- rather-than-funct) – nawfal

+0

Respondido con algunos ejemplos ..http: //stackoverflow.com/questions/403088/practical-use-of-expression-trees/20470060#20470060 – Moumit

Respuesta

63

Un árbol de expresiones es una estructura de datos que contiene expresiones, que básicamente es código. Entonces, es una estructura de árbol que representa un cálculo que puede hacer en el código. Estos fragmentos de código se pueden ejecutar "ejecutando" el árbol de expresiones sobre un conjunto de datos.

Una gran ventaja de los árboles de expresiones es que puedes construirlos en código; es decir, compila código ejecutable (o una secuencia de pasos) en el código. También puede modificar el código antes de ejecutarlo reemplazando expresiones por otras expresiones.

Una expresión es entonces un delegado de función, como (int x => return x * x).

Ver también http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx

+3

Esto no es realmente cierto. Como se señala en el artículo vinculado, los árboles de expresión se utilizan principalmente para representar cálculos que se enviarán a través del cable para su ejecución en otro lugar. Por esa razón, no contienen código; más bien son en lugar de código. –

+1

Expression Trees se puede usar para cualquier cálculo que desee realizar, local o remotamente. Podría escribir fácilmente un analizador que convierta una expresión escrita en un árbol de expresiones. Además, nunca dije que Expression Trees contiene código. –

+1

si "estructura de árbol con fragmentos de código" no pretende significar que "contienen código", entonces debe editar su respuesta para dejarlo en claro. Debería dejar en claro que las Expresiones no contienen ningún código IL, y dependen de que se conviertan en algo ejecutable. –

Cuestiones relacionadas