문제

이 질문을 처음 입력했을 때, 나는 중복 질문을 찾기 위해 누군가가 이미이 질문을해야한다고 확신했습니다. 내 계획은이 질문을 게시하는 대신 해당 듀피 링크를 따르는 것이 었습니다. 그러나이 질문은 내가 볼 수있는 한 전에 묻지 않았습니다 ... "관련 질문"목록에서는 나타나지 않았습니다.

C#에서 표현 나무에 대한 심층적 인 이해를 얻기 위해 찾은 최고의 리소스 (기사, 서적, 블로그 게시물 등)는 무엇입니까? 나는 그들의 능력에 계속 놀랐고, 이제 나는 내가 말하는 시점에있다. 나는 체계적으로, 체계적으로 능력을 다루는 자료를 찾고 있으며, 당신이 그들과 함께 할 수있는 일에 대한 자세한 예를 살펴 봅니다.

참고 : 나는 람다 표현에 대해 이야기하고 있지 않습니다. 나는 표현 <t>에 대해 이야기하고 있으며 그것과 함께 그리고 그것으로부터 발생하는 모든 것들을 이야기하고 있습니다.

감사.

도움이 되었습니까?

해결책

Microsoft LINQ를 프로그래밍하는 11 장 (내부 표현 나무) 및 12 장 (ISBN 13 : 978-0-7356-2400-9 또는 ISBN 10 : 0-7356-2400-3)은 저에게 귀중했습니다. 나는 Jons Book을 읽지 않았지만 그는 품질이 좋은 사람이며 물건을 잘 설명합니다. 그래서 그의 보도도 좋을 것이라고 가정합니다.

또 다른 위대한 자원입니다 Bart de Smet의 블로그

또한, MSDN, 구축을위한 샘플 코드를 주시하십시오. 간단한 LINQ에서 데이터베이스 (Pedram Rezaei)는 약 40 페이지의 Doco가 설명하려고합니다.

Expression Tree의 정말로 유용한 리소스는 실제로 그것을 있어야합니다 입니다 발현 트리 시각기 디버깅 도구.

또한 표현 트리 방문객에 대해 최대한 많이 배워야합니다. 꽤 좋은 기본 클래스가 있습니다. 여기.

다음은 해당 방문자 클래스에서 파생 된 일부 샘플 코드입니다. 일부 디버깅을 수행합니다 (내가 언급 한 책의 일부 샘플 코드를 기반으로) Prependindent 메소드 호출은 문자열의 확장 메소드 일뿐입니다. 수준.

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

다른 팁

나는 그들이 포괄적이라고 주장하지는 않지만 많은 Expression 게시물 내 블로그에서. 영국에 기반을 둔 경우에도 세션을 발표 할 것입니다. Expression ~에 DDD 남서부 5 월에 (및 지난 밤, 그러나 너무 늦었습니다;-p). 원한다면 슬라이드 데크와 관련 기사의 일부 링크를 게시 할 수 있습니다. 불행히도 PPTX는 말한 현명한 독립형 독서는 거의 없습니다.

다른 독서 (블로그가 아님) :

(그리고 여기와 Microsoft.public.dotnet.languages.csharp에 대한 전체 게시물 -검색해보십시오 : +Expression -Regex- "정규 표현"

체계를 배우십시오. 표현식은 Lambda 미적분학과 동일한 원칙을 사용하므로 더 나은 통찰력을 제공합니다.

또는 비슷하지만 훨씬 덜 우아한 DLR을 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top