Quel est l'avantage des arbres d'expression?

.net expression-trees

Question

En développant les applications en utilisant le langage .Net, je n’obtiens pas l’utilisation ou les avantages de l’arbre d’expression? Est-ce vraiment nécessaire?

Réponse d'expert

Un arbre d'expression vous permet d' exprimer votre code en C # normal, mais de le déconstruire, de l'inspecter et de l'interpréter. Par exemple, vous pouvez l'interpréter en écrivant une chaîne TSQL équivalente (exemple: LINQ-to-SQL ou Entity Framework) ou une requête de service Web (astoria). Vous pouvez l'interpréter comme un appel RPC (j'ai écrit une couche RPC basée sur une expression).

Pour répéter mon entrée de blog "Explaining Expression" :

  • La version déléguée ( Func<int,int,bool> ) est le gestionnaire le plus puissant . "J'ai besoin que vous me donniez le moyen de passer de 2 entiers à un booléen; je me fiche de comment - quand je serai prêt, je vous le demanderai - et vous pourrez me dire la réponse".
  • La version de l'expression ( Expr<Func<int,int,bool>> ) est l' analyste consciencieux ; "J'ai besoin de toi pour m'expliquer - si je te donnais 2 nombres entiers, comment vas-tu me donner un bool?"

Si vous avez l'expression, vous pouvez appeler Compile() pour former un délégué (pour le faire exactement comme expliqué), ou vous pouvez unpick et faire quelque chose de similaire basé sur les mesures qu'ils ont pris.


Un autre point de vue sur Expression est qu’il peut ILGenerator d’une version simplifiée d’ ILGenerator , tout en restant très polyvalent. Très utile pour la méta-programmation. Voici un article explorant cette approche .


Réponse populaire

Les arbres d’expression utilisent largement dans LINQ to SQL, Entity Framework, les extensions HTML d’ASP.NET MVC où l’exécution a besoin d’interpréter l’expression d’une manière différente champ).

Si vous n'avez pas besoin de cette possibilité de réinterprétation d'une expression C # / VB, vous n'avez pas besoin d'utiliser les arbres d'expression.

(Vous ne devez pas utiliser la plupart du temps dans .NET. Par exemple, ServiceBase ne s'applique que si vous écrivez un service, WPF n'est pas pertinent pour une application Web.)



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow