Quelle est la meilleure ressource pour apprendre les arbres d’expression C # en profondeur?

Lorsque j’ai tapé cette question pour la première fois, je l’ai fait pour trouver les questions en double, en étant sûr que quelqu’un avait déjà posé cette question. Mon plan était de suivre ces liens au lieu de poster cette question. Mais pour autant que je sache, cette question n’a pas encore été posée … elle ne s’est pas présentée dans la liste “Questions connexes”.

Quelles sont les meilleures ressources que vous avez trouvées (articles, livres, articles de blog, etc.) pour acquérir une compréhension approfondie des arbres d’expression en C #? Je suis toujours surpris par leurs capacités, et maintenant je suis en train de dire: “OK, assez de surprise. Je veux arrêter maintenant et obtenir un doctorat dans ces domaines”. Je cherche du matériel qui couvre systématiquement les capacités, puis passe en revue des exemples détaillés de ce que vous pouvez en faire.

Note: je ne parle pas des expressions lambda. Je parle de l’expression et de toutes les choses qui vont avec et qui en découlent.

Merci.

Le chapitre 11 (Arbres d’expression à l’intérieur) et le chapitre 12 (Extension de Linq) de la programmation de Microsoft Linq (ISBN 13: 978-0-7356-2400-9 ou ISBN 10: 0-7356-2400-3) m’ont été d’une aide précieuse. Je n’ai pas lu le livre de Jons, mais il est un gars de qualité et explique bien les choses, alors je suppose que sa couverture serait également bonne.

Le blog de Bart De Smet est une autre excellente ressource

De plus, gardez un œil sur MSDN, l’exemple de code pour la construction d’un Simple Linq to Database (par Pedram Rezaei) est sur le point d’obtenir environ 40 pages de Doco l’expliquant.

En fait, une ressource vraiment utile pour Expression Tree est que je devrais absolument avoir l’outil de débogage Expression Tree Visualiser .

Vous devriez également en apprendre autant que possible sur les visiteurs de l’Arbre d’expression, il existe une très bonne implémentation de la classe de base ici .

Voici un exemple de code dérivé de cette classe Visitor pour effectuer un débogage (je me suis basé sur un exemple de code dans le livre que j’ai mentionné). L’appel de la méthode prependIndent est juste une méthode d’extension sur une chaîne pour mettre un “-” à chaque indentation niveau.

internal class DebugDisplayTree : ExpressionVisitor { private int indentLevel = 0; protected override System.Linq.Expressions.Expression Visit(Expression exp) { if (exp != null) { Trace.WriteLine(ssortingng.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToSsortingng()).PrependIndent(indentLevel)); } indentLevel++; Expression result = base.Visit(exp); indentLevel--; return result; } ... 

Je ne les revendique pas comme étant complets, mais j’ai un certain nombre de publications Expression sur mon blog . Si vous êtes basé au Royaume-Uni, je présenterai également une session sur l’ Expression à DDD South West en mai (et hier soir , mais trop tard ;-p). Je pourrais poster le diaporama et certains liens des articles connexes, si vous voulez … malheureusement, un pptx destiné à être parlé rend rarement une lecture autonome raisonnable.

Quelques autres lectures (pas du blog):

  • Jason Bock: programmation génétique avec Expression
  • (moi encore): opérateurs génériques avec Expression
  • (et encore, sur InfoQ) Expression tant que compilateur

(et un tas de publications ici et sur microsoft.public.dotnet.languages.csharp – essayez de chercher: + expression -regex – “expression régulière”

Apprenez Scheme. Les expressions utilisent les mêmes principes que le lambda-calcul et vous donneront donc une meilleure idée.

Alternativement, vous pouvez regarder le DLR, qui est similaire mais beaucoup moins élégant.