Pergunta

Quando eu digitei primeiro a esta pergunta, eu fiz isso, a fim de encontrar as perguntas duplicadas, sentindo-se de que alguém já deve ter feito esta pergunta. Meu plano era seguir os links dupe em vez de postar esta pergunta. Mas esta questão não tenha sido solicitado antes, tanto quanto eu posso ver ... ele não apareceu na lista "Questões relacionadas".

O que são alguns dos melhores recursos que você encontrou (artigos, livros, blogs, etc.) para obter uma compreensão aprofundada de árvores de expressão em C #? eu continuo recebendo surpreendido por suas capacidades, e agora eu estou no ponto onde eu estou dizendo, "OK, surpresa o suficiente. Eu quero parar agora e obter um PhD nessas coisas." Estou à procura de material que sistematicamente, cobre metodicamente as capacidades e, em seguida, caminha através de exemplos detalhados do que você pode fazer com eles.

Nota: Eu não estou falando de expressões lambda. Eu estou falando sobre Expression e todas as coisas que vão com ele e surgir a partir dele.

Graças.

Foi útil?

Solução

Capítulo 11 (Dentro de expressão Trees) e capítulo 12 (Estendendo Linq) de Programação Microsoft Linq (ISBN 13: 978-0-7356-2400-9 ou ISBN 10: 0-7356-2400-3) tem sido inestimável para mim. Eu não li Jons livro, mas ele é um cara de qualidade e explica as coisas bem, assim que eu supor que sua cobertura também seria bom.

Outro grande recurso é Bart De Smet do blogue

Além disso, mantenha seu olho no MSDN, o código de exemplo para a construção de um simples Linq para banco de dados (por Pedram Rezaei) está prestes a obter cerca de 40 páginas de Doco explicá-lo.

Um recurso muito, muito útil para a Expressão da árvore de fato gostaria de considerá-lo como um deve ter é o Expressão Árvore Visualiser ferramenta de depuração.

Você também deve aprender o máximo que puder sobre a árvore de expressão visitantes, não há um inplementation classe muito boa base aqui .

Aqui está um código de exemplo derivada dessa classe Visitor fazer alguma depuração (Eu baseei este em algum código de exemplo no livro que eu mencionei) a chamada de método prependIndent é apenas um método de extensão em uma corda para colocar um "-" em cada nível travessão.

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

Outras dicas

Eu não reclamá-los para ser abrangente, mas eu tenho um número de postos de Expression no meu blogue . Se você está baseada no Reino Unido, eu também irá apresentar uma sessão sobre Expression em DDD South West em maio (e última noite , mas ;-p tarde demais). Eu poderia postar o conjunto de slides e alguns dos links de artigos relacionados, se você quiser ... infelizmente, um pptx pretende ser falado raramente faz leitura autônoma sensata.

Alguns outra leitura (não do blog):

(e toda uma carga de mensagens aqui e em microsoft.public.dotnet.languages.csharp - tente procurar por: + -regex expressão - "expressão regular"

Saiba Scheme. Expressões usar os mesmos princípios como cálculo lambda, e, portanto, vai lhe dar algumas dicas melhor.

Como alternativa, você pode olhar para o DLR, que é um semelhante, mas muito menos elegante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top