나는 나의 ExpressionVisitor에서 내가 오버라이드 VisitMethodCall에 MethodCallExpression을 얻을하는 방법 인수에 대한 연산과 함께 MethodCallExpression을 컴파일하는 방법은 무엇입니까?
private static int Method(int n)
{
return n;
}
방법
있습니다. MethodCallExpression에는 다음이 포함n => Method(2 + n)
내가 Func을로 컴파일하고 다음과 같이 호출 할 :
func(3)
을 그리고 그것은
5. 나는이 시도 반환해야합니다입니다 :
IEnumerable<ParameterExpression> parameters = expression.Arguments.Select(a => Expression.Parameter(a.Type, a.ToString()));
MethodCallExpression call = Expression.Call(expression.Method, parameters);
Expression<Func<Int32, Int32>> lambda = Expression.Lambda<Func<int, int>>(call, call.Arguments.OfType<ParameterExpression>());
var func = lambda.Compile();
Console.WriteLine(func(3));
을 그리고 3이 아니라 5를 반환합니다.
왜냐하면 2 + x는 param 이름이고 3으로 바꿔야하기 때문입니다.
왜 표현 방문자를 무시할 때 이와 비슷한 작업을 수행 하시겠습니까? – Evk
방금 교육 사례 일 뿐이며, 방문자의 외부에이 기능을 보냅니다. –
다른 표현 방문자가 필요하다고 생각합니다. 해당 MethodCallExpression에서 매개 변수 (인수가 아님)를 \ 추출해야합니다. – Evk