Frage

Als ich diese Frage eingegeben hat, habe ich so um die doppelten Fragen zu finden, das Gefühl sicher, dass jemand gefragt haben muss diese Frage bereits. Mein Plan war, diese Betrogene Links anstelle der Entsendung dieser Frage zu folgen. Aber diese Frage hat, bevor er als noch nicht gefragt worden, wie ich sehe ... es hat nicht in der „Verwandte Fragen“ Liste auftauchen.

Was sind einige der besten Ressourcen, die Sie (Artikel, Bücher, Blog-Posts, etc.) für die Gewinnung einer eingehenden Verständnis der Expression Bäume in C # gefunden habe? Ich werde immer überrascht ihre Fähigkeiten, und jetzt habe ich an dem Punkt bin, wo ich sage: „OK, genug Überraschung. ich möchte jetzt stoppen und einen PhD in diesen Dingen bekommen.“ Ich suche nach Material, das systematisch, methodisch die Fähigkeiten abdeckt und dann geht durch ausführliche Beispiele dafür, was man mit ihnen machen kann.

Hinweis: Ich spreche nicht über Lambda-Ausdrücke. Ich spreche über Expression und all die Dinge, die mit ihm zu gehen und ergeben sich aus es.

Danke.

War es hilfreich?

Lösung

Kapitel 11 (Innen Expression Trees) und Kapitel 12 (Erweiterung Linq) der Programmierung Microsoft Linq (ISBN 13: 978-0-7356-2400-9 oder ISBN 10: 0-7356-2400-3) ist von unschätzbarem Wert für mich. Ich habe nicht Jons Buch lesen, aber er ist ein Qualitäts Kerl und erklärt die Dinge gut, so dass ich davon ausgehen, dass seine Berichterstattung wäre auch gut.

Eine weitere große Ressource ist Bart De Smet Blog

Auch halten Sie Ihre Augen auf MSDN, dem Beispielcode für den Aufbau einer Expression Baum Visualiser Debugging-Tool.

Sie sollten auch lernen, so viel wie möglich über Expression Baum Besucher gibt es eine ziemlich gute Basisklasse inplementation hier .

Hier ist ein Beispielcode aus diesen Besuchern Klasse abgeleitet einige Debug zu tun (ich basierte diese auf einig Beispielcode in dem Buch, das ich erwähnte) der prependIndent Methodenaufruf ist nur eine Erweiterung Methode an einer Schnur ein setzen „-“ auf jeder Einzugsebene.

  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;
    }
    ...

Andere Tipps

Ich beanspruche sie nicht umfassend zu sein, aber ich habe eine Reihe von Expression Beiträge auf meinem Blog . Wenn Sie in Großbritannien basieren, ich werde auch eine Sitzung auf Expression unter DDD South West Mai (und letzte Nacht , aber zu spät ;-P). Ich konnte die Folie Deck und einige der Links von verwandten Artikeln veröffentlichen, wenn Sie wollen ... leider ein pptx sein soll gesprochen selten sinnvoll eigenständige macht Lesen.

Einige andere (nicht aus dem Blog) zu lesen:

(und eine ganze Ladung Beiträge hier und auf microsoft.public.dotnet.languages.csharp  - versuchen, für die Suche: + Ausdruck -regex - "regulärer Ausdruck"

Erfahren Schema. Ausdrücke verwenden, um die gleichen Prinzipien wie Lambda-Kalkül, und daher werden Sie einige bessere Einsicht.

Alternativ können Sie am DLR suchen, die eine ähnliche, aber viel weniger elegant ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top