2009-03-25 15 views
51

Cuando escribí esta pregunta por primera vez, lo hice para encontrar las preguntas duplicadas, con la seguridad de que alguien ya debería haber hecho esta pregunta. Mi plan era seguir esos enlaces dupe en lugar de publicar esta pregunta. Pero esta pregunta no se ha formulado antes, hasta donde puedo ver ... no apareció en la lista de "Preguntas relacionadas".¿Cuál es el mejor recurso para aprender árboles de expresión de C# en profundidad?

¿Cuáles son algunos de los mejores recursos que ha encontrado (artículos, libros, publicaciones en blogs, etc.) para obtener una comprensión profunda de Expression Trees in C#? Me sigo sorprendiendo por sus capacidades, y ahora estoy en el punto en el que digo, "OK, suficiente sorpresa. Quiero parar ahora mismo y obtener un doctorado en estas cosas". Estoy buscando material que sistemáticamente, cubra metódicamente las capacidades y luego explore ejemplos detallados de lo que puede hacer con ellos.

Nota: No estoy hablando de las expresiones lambda. Estoy hablando de la Expresión < T> y de todas las cosas que la acompañan y surgen de ella.

Gracias.

Respuesta

34

El capítulo 11 (Árboles de expresión interior) y el capítulo 12 (Ampliación de Linq) de la programación de Microsoft Linq (ISBN 13: 978-0-7356-2400-9 o ISBN 10: 0-7356-2400-3) han sido invaluables para mi. No he leído el libro de Jons, pero él es un hombre de calidad y explica las cosas bien, así que supongo que su cobertura también sería buena.

Otro gran recurso es Bart De Smet's blog

También, mantener el ojo en MSDN, el código de ejemplo para la construcción de un Simple Linq to Database (por Pedram Rezaei) está a punto de obtener alrededor de 40 páginas de Doco explicarla.

Una realidad, recurso muy útil para la expresión de árbol, de hecho, yo consideraría como un debe tener es la herramienta Expression Tree Visualiser depuración.

También debe aprender todo lo que pueda acerca de Expression Tree Visitors, hay una muy buena clase base de implementación here.

Aquí hay un ejemplo de código derivado de esa clase de Visitor para depurar (basé esto en algún código de muestra en el libro que mencioné) la llamada al método prependIndent es solo un método de extensión en una cadena para poner "- "en cada nivel de sangría.

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

Según lo que puedo ver en Amazon, este libro se ve muy bien. Gracias por compartir. –

+4

Con el visualizador, también puede hacerlo en una línea: http://marcgravell.blogspot.com/2009/03/visualizing-expressions-in-propertygrid.html –

17

no reclamarlos ser exhaustivo, pero tengo una serie de mensajes Expressionon my blog. Si se basan Reino Unido, también presentará una sesión sobre Expression en DDD South West en mayo (y last night, pero ;-P demasiado tarde). Podría publicar el mazo de diapositivas y algunos de los enlaces de artículos relacionados, si quieres ... desafortunadamente, un pptx destinado a ser hablado rara vez hace una lectura independiente sensata.

Algunos otra lectura (no del blog):

(y toda una carga de mensajes aquí y en microsoft.public.dotnet.languages.csharp - intenta buscar: + expresión -regex - "expresión regular"

+1

+1 - Marc está más "arriba" con la expresión árboles que cualquier otra persona que conozco. –

+0

Excelente. Verificare estas cosas. Gracias. –

+0

Para obtener información, también he publicado algunas ideas para InfoQ: http://www.infoq.com/articles/expression-compiler –

5

Learn Scheme. Las expresiones usan los mismos principios que el cálculo lambda y, por lo tanto, te darán una mejor idea.

Como alternativa, puede mirar el DLR, que es similar pero mucho menos elegante.

Cuestiones relacionadas