我有这个方法:
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,我似乎无法弄清楚如何编写代码来获取它的值。
最佳答案
这是答案(灵感来自 Akash 的答案):
LambdaExpression lambda = Expression.Lambda(methodCall.Arguments[0]);
var compiledExpression = lambda.Compile();
return compiledExpression.DynamicInvoke();
关于c# - 如何在表达式中获取引用类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503316/