2013-04-18 1 views
0

같은 식을 감안할 때 :변수/속성이 폐쇄 된 시점을 어떻게 알 수 있습니까?

Express
void Express(Expression<Predicate<Int32>> predicatesGonnaPredicate) 
{ 
    .... 
} 

위의 식을 구문 분석

같은 것이 어떻게 프로그래밍 다섯 이상 폐쇄 된 것으로 판단 것입니다
Int32 five = 5; 

Express(num => num == five); 

? 나는 그것을 해킹 할 수있는 거대한 해킹 방법을 생각할 수 있지만 이것을 확인하기위한 적절한 수단이 있어야 하는가?

+0

이 코드의 머리 부분이나 꼬리 부분을 만들 수 없습니다. '5'란 무엇이며 람다에서는'number '가 사용되지 않는 이유는 무엇입니까? –

+0

또한 값은 처음부터 닫히지 않습니다. ** 외부 변수 **는 닫혀 있습니다. 코드가 클래스에 있으면 변수가 아니더라도 "this"는 외부 변수로 간주됩니다. –

+0

죄송합니다. 결정된. – sircodesalot

답변

1

람다의 매개 변수에 의존하지 않는 모든 하위 표현식을 해당 값으로 바꾸려면 Matt Warren의 기사 Building an IQueryable Provider - Part III에서 PartialEval을 사용할 수 있습니다.

예를 들어, 결과가 표현식 num => num == 5이됩니다.

+0

너는 그걸 알아 냈어. 매개 변수가없는 항목을 평가할 수 있으므로 매개 변수가 없는지 확인하고 그렇지 않으면 로컬로 평가할 수 있습니다. 답변 해주셔서 감사합니다! – sircodesalot

+0

매트는이 물건에 관해서 남자입니다. –