C#任何函数作为参数

The*_*ler 15 c#

是否可以创建一个方法,将任何方法(不管它的参数)作为参数?该方法还有一个params参数,然后获取参数方法的所有参数.

基本上我想要的是这样的:

public void CallTheMethod(Action<int> theMethod, params object[] parameters)
Run Code Online (Sandbox Code Playgroud)

但是对于任何方法,不仅仅是采用int的方法.

这样的事情可能吗?

谢谢

Mat*_*ten 6

是的,有代表:

public object CallTheMethod(Delegate theMethod, params object[] parameters)
{
    return theMethod.DynamicInvoke(parameters);
}
Run Code Online (Sandbox Code Playgroud)

但请参阅Marc Gravell对您问题的评论 :)

好吧,你可以通过非特定的Delegate,但是DynamicInvokesloooooowwwwww(相对而言)

  • 我似乎无法让它发挥作用.我收到一个错误:"无法从'方法组'转换为'System.Delegate'".我所拥有的是一种方法"DoSomething(int number);" 然后你的方法.所以我尝试了"CallTheMethod(DoSomething,5)",然后我得到错误......我做错了什么,或者是否有一个我不知道的问题? (3认同)

It'*_*ie. 6

这是可能的,但不应该做什么.

这就是我要做的:

public void CallTheMethod(Action toCall)
Run Code Online (Sandbox Code Playgroud)

你可能会去"嗯".基本上,它让用户做的是:

CallTheMethod(() => SomeOtherMethod(with, some, other, parameters));
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望它返回一个类型,则涉及泛型:

public void CallTheMethod<T>(Func<T> theMethod)
Run Code Online (Sandbox Code Playgroud)

您可以在该类型上放置通用约束,随意执行任何操作,等等.