2017-05-24 7 views
0

나는 다음과 같은 방법으로 다른와 ParameterExpression를 교체하고있어와 식 트리에서 매개 변수 값을 교체 지금 매개 변수를 대체하기 위해 새로운 임시 ParameterExpression을 선언하고 지정해야합니다.복잡한 표현

이 작업을 피하고 값 (valueGetter)을 제공하는 Expression으로 ParameterExpression을 직접 대체 할 수있는 방법이 있는지 궁금합니다. 이 같은

somethig에는 명확합니다 :

return SomeLambdaExpression.Body.ReplaceParameter(valueGetter, 
    SomeLambdaExpression.Body.Parameters[0].Name); 
+0

매개 변수를 이름과 유형이 아닌 인스턴스로 바꾸면 오류가 발생할 수 있습니다 !! 이름을 버리고 제공된 표현식에서 매개 변수를 사용하십시오. 예 : https://stackoverflow.com/questions/29448432/pass-expression-parameter-as-argument-to-another-expression/29471092#29471092 MultiParamReplaceVisitor – MBoros

+0

@MBoros 완전히 틀립니다! 같은 유형의 매개 변수가 두 개 있으면 어떻게합니까? 당신은 확실히 당신이 대체하고 싶은 것을 식별하기 위해 이름이 필요합니다! – sam

+0

인데 INSTANCE (유형이 아님)로 대체하는 이유입니다. 그 이름은 의미가 없습니다. list => list.Where (x => x> 4) .Select (x => x + 1)에는 int 유형과 x라는 두 가지 DIFFERENT 매개 변수가 있습니다. 이것은 하나의 표현 트리입니다. 모든 매개 변수가 동일한 것으로 불리는 트리를 수동으로 구성 할 수 있으며 내부 매개 변수는 외부 매개 변수와 동일한 이름과 유형을 가질 수 있습니다. 인스턴스로 이동해야합니다. – MBoros

답변

1
방문자에

, 대신 return base.VisitParameter(_parameter);, 당신은 return _expression; 할 수 있습니다.