2012-05-26 6 views
5

Ecco un codice per restituire una funzione lineare (y = ax + b).Creazione di un Func <> dinamicamente - Lambdas vs. Expression trees

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

ho potuto fare la stessa cosa con alberi di espressione, ma non sono sicuro che sia valsa la pena.

So che il lambda catturerà i parametri, che è uno svantaggio. Ci sono altri pro/contro di cui non sono a conoscenza?

La mia domanda principale è: vale la pena utilizzare gli alberi di espressione in questo scenario? Perché o perché no?

+0

Con quale frequenza chiamate la funzione risultante? –

+0

Ovunque da 1 a milioni. –

risposta

5

Se si conosce il codice in fase di compilazione, quasi sicuramente userò un'espressione lambda. Il fatto che i parametri siano catturati (piuttosto che essere espressi come costanti) è quasi sempre irrilevante - e per giustificare la costruzione di un albero di espressioni, dovresti provare che fosse significativo.

alberi di espressione sono molto più applicabili quando:

  • si vuole costruire in modo dinamico da diverse bit di espressioni
  • Si vuole analizzare l'albero di espressione come dati, per esempio come provider LINQ

Quando non lo sono, il vantaggio di leggibilità dell'utilizzo di un'espressione lambda è notevole.