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

Chu*_*ris 3 .net c#

有没有办法将任何方法作为参数发送?我需要为所有类型的方法做到这一点,而不是关心签名和返回.说这样的话(糟糕的代码,只是为了这个想法):

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")-);
Run Code Online (Sandbox Code Playgroud)

我尝试使用Actionas参数没有成功.

我需要做的是将任何方法发送到函数,然后使用反射来获取方法名称和参数,所以如果有其他方式你们可以搞清楚,我也很乐意听到它.

Jon*_*eet 9

编号.编译器必须始终能够识别要转换为的特定委托,并且没有与所有方法签名兼容的单个委托类型.您可以通过使用得到很长的路要走Action,Action<T>,Action<T1, T2>等,然后Func<TResult>,Func<T1, TResult>等...但即使这是怎么回事失败,当谈到outref参数.此外,需要考虑重载决策.

另外,您的语法是传递方法调用的结果,这与首先传递方法不同.(这忽略了-前缀/后缀,它似乎是伪造的语法.)

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

void TestMethod(Expression<Action> action)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后:

foo.TestMethod(() => foo.AnotherMethod(1,2));
Run Code Online (Sandbox Code Playgroud)

TestMethod你可以再看看表达式树,找出它的一个方法调用,制定目标,参数等见的表达式树MSDN页面获取更多信息.