gpt4 book ai didi

c# - 将任何方法作为参数发送以获取元数据

转载 作者:行者123 更新时间:2023-11-30 13:23:21 25 4
gpt4 key购买 nike

有没有办法将任何方法作为参数发送?我需要为所有类型的方法执行此操作,而不关心签名和返回。像这样说(糟糕的代码,只是为了这个想法):

public class Foo
{
...
void TestMethod(DontKnowWhatToPutHere theDelegate) {}
...
}

...

foo.TestMethod(-foo.AnotherMethod(1,2)-);
foo.TestMethod(-foo.AnotherMethod("I don't care method signature nor returning type")-);

我尝试使用 Action 作为参数,但没有成功。

我需要做的是将任何方法发送给一个函数,然后使用反射获取方法名和参数,所以如果你们能找到另一种方法,我也很乐意听到。

最佳答案

没有。编译器始终必须能够识别要转换为的特定委托(delegate),并且没有与所有方法签名兼容的单一委托(delegate)类型。使用 Action 可以走很远的路, Action<T> , Action<T1, T2>等等,然后 Func<TResult> , Func<T1, TResult>等等...但即便如此,当涉及到 out 时也会失败和 ref参数。此外,还需要考虑过载解决方案。

此外,您的语法正在传递方法调用的结果,这与首先传递方法不同。 (这忽略了 - 前缀/后缀,这似乎是虚构的语法。)

可以使用的是Expression<Action>并包装方法调用:

void TestMethod(Expression<Action> action)
{
...
}

然后:

foo.TestMethod(() => foo.AnotherMethod(1,2));

TestMethod内然后您可以查看表达式树以发现它是一个方法调用,计算出目标、参数等。参见 MSDN page on expression trees获取更多信息。

关于c# - 将任何方法作为参数发送以获取元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12677543/

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