문제

C#에서 Expression<>은 정확히 어떤 용도로 사용되나요?Expression<>을 객체로 인스턴스화하는 시나리오가 있습니까?그렇다면 예를 들어주세요!

감사합니다!

도움이 되었습니까?

해결책

Expression<T> 거의 전적으로 LINQ에 사용되지만 그렇지 않습니다. 가지다 장차 ~ 가 되는.LINQ 내에서는 일반적으로 코드로 표현된 논리를 "캡처"하지만 이를 데이터에 유지하는 데 사용됩니다.그런 다음 LINQ 공급자가 해당 데이터를 검사하고 적절하게 처리할 수 있습니다.이를 SQL로 변환하여일반적으로 LINQ의 식 트리는 컴파일러에 의해 람다 식이나 쿼리 식에서 생성되지만 다른 경우에는 API를 직접 사용하는 것이 편리할 수 있습니다.

내가 사용하고 본 다른 장소의 몇 가지 예:

  • ~ 안에 기타, Marc Gravell은 이를 "일반 산술"을 구현하는 데 사용했습니다. 유형에 관련 연산자가 있으면 일반적으로 사용할 수 있습니다.
  • ~ 안에 무제한멜로디 나는 기본 유형에 관계없이 플래그 열거형에 대한 작업을 수행하기 위해 비슷한 방식으로 이를 사용했습니다(이는 예상보다 까다롭습니다. long 그리고 ulong 범위가 다양함)
  • ~ 안에 시각적 LINQ 쿼리 식을 사용하여 LINQ를 "애니메이션"시켰으므로 무슨 일이 일어나고 있는지 확인할 수 있습니다.분명히 이것은 LINQ 사용법이지만 논리를 다른 형식으로 변환하는 전통적인 형식은 아닙니다.

다른 팁

LINQ의 관점에서, 런타임에서 더 다재다능한 LINQ 쿼리를 람다에서 할 수있는 것보다 더 다재다능한 LINQ 쿼리를 만들기 위해 할 수있는 일이 있습니다.

나는 사용했다 Expression 대안으로 마이크로 컴파일러로 여러 번 DynamicMethod 그리고 일. 이 접근법은 .NET 4.0에서 더 강해집니다 (InfoQ에서 논의 된 바와 같이), 그러나 3.5에도 있습니다 많이 할 수있는 일 중 (일반적으로 런타임 데이터, 구성 등) :

또한 Microsoft에서 수행 한 작업에 대해 수학 엔진의 일부로 사용했습니다. 즉, 수학 표현식 ( "(x + 12) * y = z"등) Expression 트리, 컴파일하고 실행하십시오.

또 다른 intersting 사용 (Jason Bock, 여기) 유전자 프로그래밍에있다; 후보자를 구축하십시오 Expression 나무를 신속하게 실행하는 데 필요한 코드가 있습니다 (후 Compile()), 그러나 중요하게는 (유전자 프로그래밍의 경우) 주위의 조각을 바꾸는 것도 있습니다.

내 전후 코드를 살펴보세요 다른 질문에 대한 나의 대답.

요약: Expression<> 코드를 크게 단순화하고 이해하기 쉽고 팬텀 버그를 수정했습니다.

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