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