gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:28:34 25 4
gpt4 key购买 nike

我有这个方法:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com