Expression Tree

2023. 9. 4. 00:00CSharp

반응형

식 트리는 코드를 정의하는 데이터 구조입니다. 식 트리는 컴파일러가 코드를 분석하고 컴파일된 출력을 생성하는 데 사용하는 것과 동일한 구조를 기반으로 합니다. Roslyn API에서 사용되는 유형과 표현식 트리 사이에 꽤 많은 유사점이 있음을 알 수 있습니다 .개념은 유사하며 최종 결과는 의미 있는 방식으로 소스 코드를 검사할 수 있는 데이터 구조입니다. 그러나 식 트리는 Roslyn API와 다른 클래스 및 API 집합을 기반으로 합니다. 다음은 한 줄의 코드입니다.

var sum = 1 + 2;

위 식은 다음과 같이 표현 할 수 있다.

  • var sum = 1 + 2;할당( ) 이 있는 변수 선언문
    • 암시적 변수 유형 선언( var sum)
      • 암시적 var 키워드( var)
      • 변수명 선언( sum)
    • 할당 연산자( =)
    • 이진법 덧셈식 ( 1 + 2)
      • 왼쪽 피연산자( 1)
      • 더하기 연산자( +)
      • 오른쪽 피연산자( 2)

 

식 트리의 구조는 매우 일관성이 있습니다. 기본 사항을 익히고 나면 식 트리로 표현되는 가장 복잡한 코드도 이해할 수 있습니다. 데이터 구조의 우아함은 C# 컴파일러가 가장 복잡한 C# 프로그램을 분석하고 복잡한 소스 코드에서 적절한 출력을 생성하는 방법을 설명합니다. 식 트리의 구조에 익숙해지면 빠르게 얻은 지식을 통해 더 많은 고급 시나리오로 작업할 수 있습니다. 

 

식 트리는 변경할 수 없는 데이터 구조입니다. 식 트리를 변경(변경)하려면 원본의 복사본이지만 원하는 변경 내용이 포함된 새 트리를 만들어야 합니다.

 

 

C# 언어의 거의 모든 구문 요소에 매핑되는 식 노드 유형이 있습니다. 각 유형에는 해당 유형의 언어 요소에 대한 특정 메소드가 있습니다. 한 번에 머리에 저장하는 것이 많습니다. 모든 것을 외우려고 하기보다 표현식 트리 작업에 사용하는 기술은 다음과 같습니다.

  1. ExpressionType조사해야 할 가능한 노드를 결정하려면 열거형 의 멤버를 살펴보십시오 . 이 목록은 식 트리를 탐색하고 이해하려는 경우에 도움이 됩니다.
  2. Expression표현식을 작성하려면 클래스 의 정적 멤버를 살펴보십시오 . 이러한 메서드는 자식 노드 집합에서 모든 식 유형을 빌드할 수 있습니다.
  3. ExpressionVisitor수정된 표현식 트리를 빌드하는 클래스를 살펴보십시오 .

이 세 영역을 각각 살펴보면 더 많은 것을 발견할 수 있습니다. 

항상 이 세 단계 중 하나로 시작할 때 필요한 것을 찾을 수 있습니다.

 

대리자의 형식을 알 수 없는 경우, 즉 람다 식이 Expression<TDelegate> 가 아닌 LambdaExpression 형식인 경우 직접 호출하는 대신 대리자에서 DynamicInvoke 메서드를 호출합니다 .

 

관련영상

 

 

 

반응형