是否可以创建一个将任何方法(不管它的参数)作为参数的方法?该方法还将有一个params
参数,然后该参数将获取参数方法的所有参数。
所以基本上我想要的是这样的:
public void CallTheMethod(Action<int> theMethod, params object[] parameters)
但是对于任何方法,不仅仅是对于采用 int 的方法。
这样的事情可能吗?
谢谢
是否可以创建一个将任何方法(不管它的参数)作为参数的方法?该方法还将有一个params
参数,然后该参数将获取参数方法的所有参数。
所以基本上我想要的是这样的:
public void CallTheMethod(Action<int> theMethod, params object[] parameters)
但是对于任何方法,不仅仅是对于采用 int 的方法。
这样的事情可能吗?
谢谢
是的,有一个代表:
public object CallTheMethod(Delegate theMethod, params object[] parameters)
{
return theMethod.DynamicInvoke(parameters);
}
但是请参阅Marc Gravell对您的问题的评论 :)
好吧,您可以通过 non-specific ,
Delegate
但是DynamicInvoke
sloooooowwwwww (相对而言)
这是可能的,但不是应该做的。
这就是我要做的:
public void CallTheMethod(Action toCall)
你可能会“嗯”一声。基本上,它让用户做的是:
CallTheMethod(() => SomeOtherMethod(with, some, other, parameters));
但是,如果您希望它返回一个类型,则涉及泛型:
public void CallTheMethod<T>(Func<T> theMethod)
您可以对该类型施加通用约束,对它做任何您想做的事情,等等。
是的。您可以使用 DynamicInvoke 来调用方法:
Action<int> method1 = i => { };
Func<bool, string> method2 = b => "Hello";
int arg1 = 3;
bool arg2 = true;
//return type is void, so result = null;
object result = method1.DynamicInvoke(arg1);
//result now becomes "Hello";
result = method2.DynamicInvoke(arg2);
执行此操作的方法将变为:
object InvokeMyMethod(Delegate method, params object[] args)
{
return method.DynamicInvoke(args);
}