¿Cuál es el mejor recurso para el aprendizaje de C # árboles de expresión en profundidad?

StackOverflow https://stackoverflow.com/questions/683620

Pregunta

La primera vez que escribí esta pregunta, lo hice con el fin de encontrar las preguntas duplicadas, sintiéndose seguro de que alguien tiene que ya han hecho esta pregunta. Mi plan era seguir los enlaces duplicados en lugar de publicar esta pregunta. Sin embargo, esta cuestión no se ha hecho antes por lo que yo puedo ver ... que no apareció en la lista de "Preguntas relacionadas".

¿Cuáles son algunos de los mejores recursos que has encontrado (artículos, libros, blogs, etc.) para obtener una comprensión a fondo de los árboles de expresión en C #? Yo sigo siendo sorprendido por sus capacidades, y ahora estoy en el punto en que estoy diciendo, "OK, suficiente sorpresa. Quiero parar ahora mismo y obtener un doctorado en estas cosas." Estoy buscando material que forma sistemática, metódica cubre las capacidades y luego camina a través de ejemplos detallados de lo que puede hacer con ellos.

Nota: No estoy hablando de las expresiones lambda. Estoy hablando de Expresión y todas las cosas que van con él y se derivan de ella.

Gracias.

¿Fue útil?

Solución

Capítulo 11 (Dentro de los árboles de expresión) y el capítulo 12 (La extensión de LINQ) de programación Microsoft LINQ (ISBN 13: 978-0-7356-2400-9 o ISBN 10: 0-7356-2400-3) ha sido de gran valor para yo. No he leído el libro Jons, pero él es un tipo de calidad y explica las cosas bien, así que supongo que su cobertura también sería bueno.

Otro gran recurso es de Bart De Smet el blog

Además, mantener el ojo en MSDN, el código de ejemplo para la construcción de un simple LINQ a base de datos (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 del árbol de hecho yo lo consideraría como un debe tener es el Expresión árbol Visualiser herramienta de depuración.

También debe aprender lo más que pueda acerca de Expresión árbol visitantes, hay un inplementation bastante buena clase base aquí .

Aquí hay un código muestra derivada de esa clase de visitantes a hacer un poco de depuración (I basado esto en un código de ejemplo en el libro que he mencionado) la llamada al método prependIndent es sólo un método de extensión en una cuerda para poner el signo "-" 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;
    }
    ...

Otros consejos

No reclamarlos ser exhaustivo, pero tengo un número de puestos Expression en mi el blog . Si se basan Reino Unido, también presentará una sesión sobre Expression en DDD Suroeste en mayo (y anoche , pero ;-P demasiado tarde). Podría publicar el conjunto de diapositivas y algunos de los enlaces de artículos relacionados, si quieres ... por desgracia, un pp pretende ser hablado rara vez se hace la lectura independiente sensata.

Algunos otra lectura (no del blog):

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

Saber Esquema. Expresiones utilizan los mismos principios que el cálculo lambda, y por lo tanto le dará una mejor visión.

Como alternativa, se puede ver en el DLR, que es una similar pero mucho menos elegante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top