我有这个方法:
public void DoSomething<T>(Expression<Func<T, object>> method)
{
}
如果这样调用此方法:
DoSomething(c => c.SomeMethod(new TestObject()));
…如何获取传递到SomeMethod()的参数的值?
如果参数是值类型,则此操作有效:
var methodCall = (MethodCallExpression)method.Body;
var parameterValue = ((ConstantExpression)methodCall.Arguments[0]).Value;
然而,当我传入一个引用类型时,methodcall.arguments[0]是一个memberexpression,我似乎不知道如何编写代码从中获取值。
最佳答案
答案如下(灵感来自阿卡西的答案):
LambdaExpression lambda = Expression.Lambda(methodCall.Arguments[0]);
var compiledExpression = lambda.Compile();
return compiledExpression.DynamicInvoke();