2012-05-26 12 views
5

Aquí hay un código para devolver una función lineal (y = ax + b).Crear un Func <> dinámicamente - Lambdas frente a árboles de expresión

public static Func<double, double> LinearFunc(double slope, double offset) 
{ 
    return d => d * slope + offset; 
} 

que podía hacer lo mismo con los árboles de expresión, pero no estoy seguro de que vale la pena el esfuerzo.

Sé que la lambda capturará los parámetros, lo que es un inconveniente. ¿Hay más ventajas y desventajas de las que no tengo conocimiento?

Mi pregunta principal es, ¿vale la pena utilizar árboles de expresiones en este escenario? ¿Por qué o por qué no?

+0

¿Con qué frecuencia llama a la función resultante? –

+0

En cualquier lugar de 1 a millones. –

Respuesta

5

Si conoce el código en tiempo de compilación, casi con certeza usaré una expresión lambda. El hecho de que los parámetros sean capturados (en lugar de expresarse como constantes) casi siempre va a ser irrelevante, y para justificar la construcción de un árbol de expresiones, tendría que probar que fue significativo.

árboles de expresión son mucho más aplicable cuando:

  • usted quiere construir de forma dinámica a partir de diferentes bits de de expresiones
  • Desea analizar el árbol de expresión como de datos, por ejemplo, como proveedor de LINQ

Cuando esos no son el caso, el beneficio de legibilidad de utilizar una expresión lambda es enorme.

Cuestiones relacionadas