표현식 트리를 사용하여 문자열 표현 (예 : this question 및 this question과 같은 다른 형식으로 변환하면 Linq2Sql과 비슷한 기능을 수행 할 수 있습니다). 난 항상에 대해 동일한 결과를 반환합니다 다음 함수Lambda 표현식 트리 변환을 상수로 프리 컴파일?
public string GenerateSomeSql(Expression<Func<TResult, TProperty>> expression)
같은 인수를 모든 통화를 경우 많은 경우에
, 아마도 대부분의 경우는 식 트리 변환은 항상, 즉 동일합니다 예 : 시간이 런타임이 지속적으로 재 계산에서 낭비를 제외하고GenerateSomeSql(x => x.Age) //suppose this will always return "select Age from Person"
GenerateSomeSql(x => x.Ssn) //suppose this will always return "select Ssn from Person"
그래서 본질적으로 특정 인수를 사용하여 함수 호출은, 정말 그냥 상수이다.
변환을 실행하면 눈에 띄는 성능 저하가 발생하기에 충분히 복잡하다고 가정하면 함수 호출을 실제 상수로 미리 컴파일 할 수있는 방법이 있습니까?
편집 C# 자체 내에서이 작업을 수행 할 방법이 없다고합니다. C#에서 가장 가까운 것은 아마도 받아 들인 대답 일 것이다 (물론 캐싱 자체가 재생성보다 느리지는 않았 으면 좋겠다). 진정한 상수로 변환하려면 컴파일 후 바이트 코드를 수정하기 위해 모노 세실 (mono-cecil)과 같은 것을 사용할 수 있다고 생각합니다.