2009-03-25 4 views
51

Als ich diese Frage zum ersten Mal eintippte, tat ich dies, um die doppelten Fragen zu finden. Ich war mir sicher, dass jemand diese Frage schon gestellt hatte. Mein Plan war, diesen dummen Links zu folgen, anstatt diese Frage zu posten. Aber diese Frage wurde bisher nicht gestellt, soweit ich sehen kann ... sie ist nicht in der Liste "Verwandte Fragen" aufgetaucht.Was ist die beste Ressource für das Erlernen von C# -Ausdruckbäumen in der Tiefe?

Welche sind die besten Ressourcen, die Sie gefunden haben (Artikel, Bücher, Blogposts usw.), um ein tiefgreifendes Verständnis von Expression Trees in C# zu erhalten? Ich werde immer wieder von ihren Fähigkeiten überrascht, und jetzt bin ich an dem Punkt, an dem ich sage: "OK, genug Überraschung. Ich möchte jetzt aufhören und in diesen Dingen promovieren." Ich suche nach Material, das die Fähigkeiten systematisch und methodisch abdeckt und dann durch detaillierte Beispiele geht, was man damit machen kann.

Hinweis: Ich spreche nicht über Lambda-Ausdrücke. Ich spreche über Ausdruck < T> und all die Dinge, die damit einhergehen und daraus entstehen.

Danke.

Antwort

34

Kapitel 11 (Inside Expression Trees) und Kapitel 12 (Extending Linq) der Programmierung Microsoft Linq (ISBN 13: 978-0-7356-2400-9 oder ISBN 10: 0-7356-2400-3) war von unschätzbarem Wert für mich. Ich habe Jons Buch nicht gelesen, aber er ist ein guter Typ und erklärt Dinge gut, also nehme ich an, dass seine Berichterstattung auch gut wäre.

Eine weitere große Ressource ist Bart De Smet's blog

Auch halten Sie Ihre Augen auf MSDN, den Beispielcode für den Aufbau eines Simple Linq to Database (von Pedram Rezaei) etwa über 40 Seiten von Doco es erklären zu bekommen.

Eine wirklich, wirklich nützliche Ressource für Expression Tree ist in der Tat würde ich es als betrachten müssen ist das Expression Tree Visualiser Debugging-Tool.

Sie sollten auch so viel wie möglich über Expression Tree Besucher lernen, es gibt eine ziemlich gute Basisklasse Implementierung here.

Hier ist ein Beispielcode, der von der Visitor-Klasse abgeleitet wurde, um ein Debugging durchzuführen (ich basiere dies auf einem Beispielcode in dem Buch, das ich erwähnte). Der prependIndent-Methodenaufruf ist nur eine Erweiterungsmethode für einen String. "auf jeder Einrückungsebene.

internal class DebugDisplayTree : ExpressionVisitor 
    { 
    private int indentLevel = 0; 

    protected override System.Linq.Expressions.Expression Visit(Expression exp) 
    { 
     if (exp != null) 
     { 
     Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel)); 
     } 
     indentLevel++; 
     Expression result = base.Visit(exp); 
     indentLevel--; 
     return result; 
    } 
    ... 
+0

Von dem, was ich auf Amazon sehen kann, sieht dieses Buch sehr gut aus. Danke für das Teilen. –

+4

Re der Visualizer - Sie können es auch in einer Zeile tun: http://marcgravell.blogspot.com/2009/03/visualizing-expressions-in-propertygrid.html –

17

Ich beanspruche sie nicht umfassend zu sein, aber ich habe eine Reihe von Expression Beiträge on my blog. Wenn Sie in Großbritannien ansässig sind, werde ich im Mai eine Sitzung unter Expression unter DDD South West im Mai vorstellen (und last night, aber zu spät ;-p). Ich könnte die Folie und einige der Links aus verwandten Artikeln veröffentlichen, wenn Sie wollen ... leider macht eine pptx gesprochen selten sinnvolles eigenständiges Lesen.

Einige andere (nicht aus dem Blog) zu lesen:

(und eine ganze Ladung von Posts hier und auf microsoft.public.dotnet.languages.csharp - Suche nach: + Ausdruck -regex - "regulärer Ausdruck"

+1

+1 - Marc ist mehr mit Ausdruck "up" Bäume als jeder andere, den ich kenne. –

+0

Ausgezeichnet. Ich werde diese Dinge überprüfen. Vielen Dank. –

+0

Für Informationen habe ich auch einige Gedanken zu InfoQ geschrieben: http://www.infoq.com/articles/expression-compiler –

5

Lernschema. Ausdrücke verwenden die gleichen Prinzipien wie das Lambda-Kalkül und geben Ihnen daher einen besseren Einblick.

Alternativ können Sie sich das DLR anschauen, das ähnlich, aber viel weniger elegant ist.

Verwandte Themen