c# - 如何在表达式中获取引用类型的值?

标签 c# .net lambda

我有这个方法:

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/

相关文章:

c++ - 直接从 C++0x lambda 调用方返回

c# - 如何在单个类上禁用默认的 CaSTLe 拦截器?

c# - 我们可以使用 SignalR 在桌面应用程序中创建服务器吗?

c# - 为什么 DataGrid 不显示示例设计时数据?

c# - WPF MVVM 代码隐藏

c# - 检测字典中包含的值是否已更改

java - MyFaces @ManagedBean 中的 Lambda 导致丢失/奇怪的行为

python - Python 中使用 lambda + filter 进行列表过滤

c# - 使用参数中的匿名函数验证函数调用

c# - 为什么 String.Concat 没有针对 StringBuilder.Append 进行优化?