정확하게 표현식 <>은 C#에서 사용됩니까? Expression <> 자신을 개체로 인스턴스화하는 시나리오가 있습니까? 그렇다면 예제를주세요!C# .NET 3.5 : Expression <>은 무엇에 사용됩니까?
감사합니다.
정확하게 표현식 <>은 C#에서 사용됩니까? Expression <> 자신을 개체로 인스턴스화하는 시나리오가 있습니까? 그렇다면 예제를주세요!C# .NET 3.5 : Expression <>은 무엇에 사용됩니까?
감사합니다.
Expression<T>
은 거의 모두 LINQ에 사용되지만 은이되지 않습니다. LINQ 내에서는 일반적으로 코드로 표현 된 논리를 "캡처"하지만 데이터에 유지합니다. 그런 다음 해당 데이터를 LINQ 공급자가 검토하고 적절하게 처리 할 수 있습니다 (예 : 그것을 SQL로 변환합니다. 일반적으로 LINQ의 식 트리는 람다 식 또는 쿼리 식의 컴파일러에서 만들어 지지만 다른 경우에는 직접 API를 직접 사용하는 것이 좋습니다. 다른 곳의
몇 가지 예 나는 그것을 사용하고 사용 본 적이 : MiscUtil에서
long
및 ulong
데, 당신이 예상하는 것보다 까다 롭습니다 다른 범위)과 유사한 방식으로 그것을 사용 LINQ를 "애니메이트"하는 표현식을 사용하면 무슨 일이 일어나는지 알 수 있습니다. 분명히 이것이 LINQ 사용이지만, 논리를 다른 형식으로 변환하는 전통적인 형식이 아닙니다.my answer to another SO question 코드 뒤에 & 앞에 내보십시오.
요약 : Expression<>
는 코드를 크게 단순화하고, 이해하기 쉽도록 만들고, 심지어는 팬텀 버그를 수정했습니다.
LINQ의 관점에서 볼 때 런타임에보다 다양한 LINQ 쿼리를 만들 수있는 방법은 순전히 lambdas에서 수행 할 수있는 것보다 많습니다.
DynamicMethod
및 IL 대신에 마이크로 컴파일러로 Expression
을 여러 번 사용했습니다. 이 방법은 .NET 4.0 (as discussed on InfoQ)에서 강한 얻을 수 있지만, 심지어 3.5에서 당신이 할 수있는 일의이 많이있다 (일반적으로 런타임 데이터를 기반으로, 구성 등) :
나는 또한 WO 일부에 대한 수학 엔진의 일부로 사용 rk Microsoft와 함께했습니다. 즉, 수학 표현식 ("(x + 12) * y = z"등)을 Expression
트리로 구문 분석하고 컴파일하여 실행합니다.
또 다른 intersting 사용 (제이슨 Bock, here에 의해 설명) 유전 프로그래밍입니다; 후보자를 Expression
나무로 만들고, 신속하게 (Compile()
이후) 실행하는 데 필요한 코드가 있어야하지만, 중요한 것은 (유전 프로그래밍의 경우) 조각을 교환하는 것입니다.
Microsoft 용 코드는 어디에서나 볼 수 있습니까? 나는이 종류의 물건의 몇 가지 예를보고 싶다. – flesh
사본이 있지만 "현 상태 그대로"게시하는 것은 현명하지 않을 것이라고 생각한다. (내 고용주와 Microsoft가 공동 소유하고있다.). 처음부터 다시해야 할 시간을 찾으려고 노력할 것입니다. 그리 많지는 않지만 Microsoft의 독서 본부로가는 길에 기차에서 원본을 썼습니다. –
여기서 'VisualLINQ'를 볼 수 있습니까? – flesh
죄송합니다. 블로그 게시물 링크가 포함되었습니다. 잠시만 기다려주십시오 ... –