我有这个方法:

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();

09-05 10:26