Claudio Brotto

LINQ: Modifying Expression Trees

La regola dice: gli expression trees sono immutabili.

Il che evidentemente è un male e un bene.

Un bene perchè l'immutabilità riduce i (nostri) potenziali danni. Tanto più che, visto che un expression tree non è esattamente la struttura dati più semplice che ci possiamo immaginare, probabilmente la probabilità di danno non è così bassa.

Un male perchè, se proprio una modifica la dobbiamo effettuare, la via è un po' più complessa.

In questi giorni sono state proposte (almeno) due soluzioni.

Jomo Fisher ne presenta una nel suo blog, basata su visitor pattern e conseguente sostituzione dei "pezzi" da modificare.

Aaron Erickson sta sviluppando, invece, un progetto (MetaLinq) il cui nome è abbastanza esplicativo ! La tecnica che propone per l'editing degli expression trees è esposta tramite un ExpressionBuilder che prende in pasto un expression tree, ne crea una shadow copy modificabile ed è in grado di generare il corrispondente expression tree di output con una semplice ToExpression ().

Due approcci interessanti che meritano un'occhiata più attenta.

Posted: giu 14 2007, 10.21 by devlizard | with no comments
Filed under: