메서드 호출식이 있고 메서드를 호출하려고합니다. 방법을 찾아 냈지만 모든 인수가 ConstantExpression으로 설명되지 않았기 때문에 매개 변수 값을 검색하는 데 문제가 있습니다.MethodCallExpression에서 메서드를 호출하는 방법 #
Expression<Action<T>> = t => t.DoSomething(Par0, Par1, Par2);
MethodCallExpression methodCallExpression = selector.Body
as MethodCallExpression;
// get the information which is needed to invoke the method from the provided
// lambda expression.
MethodInfo methodInfo = methodCallExpression.Method;
object[] arguments = methodCallExpression.Arguments.OfType<ConstantExpression>()
.Select(p => p.Value).ToArray();
// invoke the expression on every item within the enumerable
foreach (TSource item in source)
{
methodInfo.Invoke(item, arguments);
}
또한, 지금 내가 할 수있는 올바른 방법이 무엇인지 확실하지 않다, 메소드를 호출하는 다른 방법을 보았다.
var func = expression.Compile();
var success = func.Invoke();
그럼 내 질문은 어떻게 methodCallExpression.Arguments
에서 메서드 인수 값을 검색 할 수 있습니까?
내 목표를 달성하기위한 더 쉬운 방법이 있습니까?
감사합니다. 훨씬 쉽습니다. 나는 지금 이렇게하고있다 : // 호출 용 델리게이트를 얻기 위해 람다 표현식을 컴파일한다. 액션 동작 = selector.Compile(); // 열거 형 내의 모든 항목에 대해 표현식 호출 foreach (소스의 TSource 항목) { 작업 (항목); } 그리고 마지막으로이 문제에 대한 msdn 설명서도 있습니다. http://msdn.microsoft.com/en-us/library/bb882536.aspx –
Enyra
'selector.Compile'할 수없는 이유가 있습니까?()()'? 왜 괄호가 작동하면'Invoke' 또는'DynamicInvoke'가 필요합니까? – ErikE