gpt4 book ai didi

c# - 从 Action 获取参数

转载 作者:太空狗 更新时间:2023-10-29 20:53:31 25 4
gpt4 key购买 nike

如何获取传递给 Action<T> 的参数?代码示例应突出显示我要实现的目标。抱歉,它有点长。

public class Program
{
public static void Main(string[] args)
{
var foo = new Foo();
foo.GetParams(x => x.Bar(7, "hello"));
}
}

public class Foo
{
public void Bar(int val, string thing) { }
}

public static class Ex
{
public static object[] GetParams<T>(this T obj, Action<T> action)
{
// Return new object[] { 7, "hello" }
}
}

唯一看起来有点用的选项是 GetInvocationList()、Method 和 Target。但它们似乎都没有包含我所追求的数据(我认为这是因为我宣布行动的方式)。谢谢

编辑:这不是我想要的类型,它是实际值 - 如注释代码中所述。

最佳答案

要做到这一点,它实际上应该是一个 Expression<Action<T>> .然后是分解表达式的情况。幸运的是,我在 protobuf-net 中拥有所有的代码,here - 特别是 ResolveMethod ,它返回 out 中的值数组(在遍历任何捕获的变量等之后)。

制作后ResolveMethod public(并删除所有 above ResolveMethod ),代码只是:

public static object[] GetParams<T>(this T obj, Expression<Action<T>> action)
{
ProtoClientExtensions.ResolveMethod<T>(
action, out Action ignoreThis, out object[] args);
return args;
}

关于c# - 从 Action<T> 获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361314/

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