Domanda

Capisco perfettamente il concetto di alberi delle espressioni, ma ho difficoltà a trovare situazioni in cui siano utili.Esiste un'istanza specifica in cui è possibile applicare gli alberi delle espressioni?Oppure è utile solo come meccanismo di trasporto del codice?Sento che mi manca qualcosa qui.Grazie!

È stato utile?

Soluzione

Oppure è utile solo come meccanismo di trasporto del codice?

È utile come file meccanismo di esecuzione per codice.Usando il modello dell'interprete, gli alberi delle espressioni possono essere interpretati direttamente.Questo è utile perché è molto facile e veloce da implementare.Tali interpreti sono onnipresenti e utilizzati anche in casi che non sembrano “interpretare” nulla, ad es.per stampare strutture nidificate.

Altri suggerimenti

Alcuni framework di mocking dei test unitari fanno uso di alberi delle espressioni per impostare aspettative/verifica fortemente tipizzate.Cioè:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method
                                              // SomeMethod was called with 
                                              // someObject as the argument

In questo caso l'espressione non viene mai effettivamente eseguita, ma l'espressione stessa contiene le informazioni interessanti.L'alternativa senza alberi di espressione sarebbe

myMock.Verify("SomeMethod", someObject) // we've lost the strong typing

Gli alberi delle espressioni sono utili quando è necessario accedere alla logica della funzione per modificarla o riapplicarla in qualche modo.

Linq to SQL è un buon esempio:

//a linq to sql statement
var recs (
    from rec in LinqDataContext.Table
    where rec.IntField > 5
    select rec );

Se non avessimo alberi delle espressioni, questa istruzione dovrebbe restituire tutti i record e quindi applicare la logica where C# a ciascuno.

Con alberi di espressione quello where rec.IntField > 5 può essere analizzato in SQL:

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top