2009-03-25 9 views
51

Quando ho digitato per la prima volta questa domanda, l'ho fatto per trovare le domande doppie, sentendo che qualcuno doveva aver già fatto questa domanda. Il mio piano era di seguire quei collegamenti dupi invece di pubblicare questa domanda. Ma questa domanda non è stata posta prima, per quanto posso vedere ... non è comparso nella lista "Domande correlate".Qual è la migliore risorsa per l'apprendimento approfondito degli alberi di espressione C#?

Quali sono le migliori risorse che hai trovato (articoli, libri, post di blog, ecc.) Per ottenere una comprensione approfondita di Expression Trees in C#? Continuo a essere sorpreso dalle loro capacità, e ora sono al punto in cui sto dicendo "Ok, abbastanza sorpresa, voglio fermarmi proprio ora e ottenere un dottorato in queste cose". Sto cercando materiale che sistematicamente, copra metodicamente le funzionalità e poi descriva dettagliatamente cosa puoi fare con loro.

Nota: non sto parlando di espressioni lambda. Sto parlando di Expression < T> e di tutte le cose che ne derivano e ne derivano.

Grazie.

risposta

34

Il capitolo 11 (Inside Expression Trees) e il capitolo 12 (Estensione di Linq) della programmazione Microsoft Linq (ISBN 13: 978-0-7356-2400-9 o ISBN 10: 0-7356-2400-3) sono stati di valore inestimabile per me. Non ho letto il libro di Jons, ma lui è un ragazzo di qualità e spiega bene le cose, quindi presumo che la sua copertura sarebbe anche buona.

Un'altra grande risorsa è Bart De Smet's blog

Inoltre, tenere d'occhio su MSDN, il codice di esempio per la costruzione di un Simple Linq to Database (da Pedram Rezaei) sta per cominciare circa 40 pagine di Doco spiegarla.

Davvero, risorsa davvero utile per Expression Tree in realtà vorrei considerarlo come una deve avere è lo strumento Expression Tree Visualiser debug.

Si dovrebbe anche imparare il più possibile sui visitatori di Expression Tree, c'è una buona implementazione della classe base here.

Ecco un codice di esempio derivato da quella classe Visitor per eseguire alcuni debug (l'ho basato su alcuni esempi di codice nel libro che ho menzionato) la chiamata al metodo prependIndent è solo un metodo di estensione su una stringa per inserire un "- "a ogni livello di rientro.

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

Da quello che posso vedere su Amazon, questo libro sta andando molto bene. Grazie per la condivisione. –

+4

Re il visualizzatore - puoi farlo anche in una riga: http://marcgravell.blogspot.com/2009/03/visualizing-expressions-in-propertygrid.html –

17

Non pretendo loro di essere esauriente, ma ho un certo numero di posti Expressionon my blog. Se sei residente nel Regno Unito, presenterò anche una sessione su Expression allo DDD South West a maggio (e last night, ma troppo tardi ;-p). Potrei postare la diapositiva e alcuni link da articoli correlati, se vuoi ... sfortunatamente, un pptx destinato a essere parlato raramente rende la lettura autonoma ragionevole.

Qualche altra lettura (non dal blog):

(e un intero carico di post qui e su microsoft.public.dotnet.languages.csharp - prova a cercare: + espressione -regex - "espressione regolare"

+1

+1 - Marc è più "in alto" con espressione alberi più di chiunque altro io conosca. –

+0

Eccellente. Controllerò queste cose. Grazie. –

+0

Per informazioni, ho anche postato alcune considerazioni su InfoQ: http://www.infoq.com/articles/expression-compiler –

5

Schema di apprendimento. Le espressioni usano gli stessi principi del calcolo lambda e quindi ti forniranno una visione migliore.

In alternativa, è possibile osservare il DLR, che è simile ma molto meno elegante.

Problemi correlati