【发布时间】:2010-10-21 01:24:22
【问题描述】:
我有一个方法调用表达式并尝试调用该方法。我想出了一个办法,但我在检索参数值时遇到了问题,因为不是每个参数都用 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 检索方法参数值?
或者有没有更简单的方法来实现我的目标?
【问题讨论】:
标签: c# .net lambda parameters