У меня есть выражение вызова метода и я пытаюсь вызвать метод. Я нашел способ, но у меня проблемы с получением значений параметров, так как не каждый аргумент описывается с помощью выражения ConstantExp.
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
?
Или есть более простой способ достичь моей цели?