Quels sont les cas dans lesquels les arbres d’expression sont utiles ?

StackOverflow https://stackoverflow.com/questions/27726

  •  09-06-2019
  •  | 
  •  

Question

Je comprends parfaitement le concept des arbres d'expression, mais j'ai du mal à trouver des situations dans lesquelles ils sont utiles.Existe-t-il un cas spécifique dans lequel les arbres d'expression peuvent être appliqués ?Ou est-il uniquement utile comme mécanisme de transport pour le code ?J'ai l'impression qu'il me manque quelque chose ici.Merci!

Était-ce utile?

La solution

Ou est-il uniquement utile comme mécanisme de transport pour le code ?

C'est utile comme mécanisme d'exécution pour le code.En utilisant le modèle d'interprète, les arbres d'expression peuvent être directement interprétés.Ceci est utile car c’est très simple et rapide à mettre en œuvre.De tels interprètes sont omniprésents et utilisés même dans les cas qui ne semblent rien « interpréter », par ex.pour imprimer des structures imbriquées.

Autres conseils

Certains frameworks de simulation de tests unitaires utilisent des arbres d'expression afin de mettre en place des attentes/vérifications fortement typées.C'est à dire:

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

Ici, l’expression n’est jamais réellement exécutée, mais l’expression elle-même contient les informations intéressantes.L'alternative sans arbres d'expression serait

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

Les arbres d'expression sont utiles lorsque vous devez accéder à la logique des fonctions afin de la modifier ou de la réappliquer d'une manière ou d'une autre.

Linq to SQL est un bon exemple :

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

Si nous n'avions pas d'arbres d'expression, cette instruction devrait renvoyer tous les enregistrements, puis appliquer la logique C# Where à chacun.

Avec des arbres d'expression qui where rec.IntField > 5 peut être analysé en SQL :

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top