Question

En quoi consiste exactement Expression < > utilisé pour en C #? Existe-t-il des scénarios dans lesquels vous instancieriez Expression < > vous-même en tant qu'objet? Si oui, donnez un exemple!

Merci!

Était-ce utile?

La solution

L'expression < T > est presque entièrement utilisée pour LINQ, mais il n'est pas obligé de l'être. Dans LINQ, il est généralement utilisé pour "capturer" la logique exprimée en code, mais la conserve en données. Ces données peuvent ensuite être examinées par le fournisseur LINQ et traitées de manière appropriée - par ex. en le convertissant en SQL. Les arbres d’expression de LINQ sont généralement créés par le compilateur à partir d’expressions lambda ou d’expressions de requête - mais dans d’autres cas, il peut être pratique d’utiliser directement l’API vous-même.

Quelques exemples d’autres endroits où je l’ai utilisé et que j’ai vu utilisé:

  • Dans MiscUtil , Marc Gravell l'a utilisé pour mettre en oeuvre "l'arithmétique générique". - si un type a l'opérateur approprié, il peut être utilisé de manière générique.
  • Dans UnconstrainedMelody , je l'ai utilisé de la même manière pour effectuer des opérations sur des énumérations de drapeaux, indépendamment de de leur type sous-jacent (ce qui est plus délicat que prévu, en raison des long et du ulong ayant des plages différentes)
  • Dans Visuel LINQ J'ai utilisé des expressions de requête pour & animer " LINQ, vous pouvez donc voir ce qui se passe. Bien que ce soit évidemment une utilisation de LINQ, ce n’est pas la forme traditionnelle de traduire la logique en une autre.

Autres conseils

En ce qui concerne LINQ, vous pouvez faire certaines choses pour créer des requêtes LINQ plus polyvalentes au moment de l'exécution que pour les lambdas.

J'ai utilisé Expression plusieurs fois en tant que micro-compilateur, à la place de DynamicMethod et de IL. Cette approche est renforcée dans .NET 4.0 ( comme indiqué dans InfoQ ), mais même dans 3.5 il y a beaucoup de choses à faire (généralement basées sur des données d'exécution; configuration, etc.):

Je l'ai également utilisé dans le cadre d'un moteur mathématique pour certains travaux réalisés avec Microsoft: analyser une expression mathématique ("(x + 12) * y = z", etc.) dans un Expression arbre, compilez-le et lancez-le.

Autre utilisation intéressante (illustrée par Jason Bock, ici ) est en programmation génétique; construisez vos candidats en tant qu'arbres Expression et vous disposez du code nécessaire pour les exécuter rapidement (après Compile () ), mais surtout (pour la programmation génétique), également pour permuter des fragments autour.

Jetez un coup d’œil à mon avant & amp; après le code dans ma réponse à une autre question SO .

Résumé: Expression < > a grandement simplifié le code, simplifié sa compréhension et même corrigé un bogue fantôme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top