2

我可以有一个通用的委托 Func 来代表任何委托输入和结果吗?如

public static int ProcessJob(Func<object[], object> function, params object[] args)

我称这个函数如下:

Func<int, string> Test = TestFunction;
AsyncJobHelper.ProcessJob(Test, i);

VS2010 在这方面给了我错误。

4

3 回答 3

2

不; 你不能那样做。

相反,您可以让您的函数采用基Delegate类并调用DynamicInvoke().
请注意,这使用反射并且会很慢。

于 2013-05-03T15:16:36.447 回答
2

也许通用 ProcessJob 是你需要的

public static TResult ProcessJob<TInput,TResult>(Func<TInput[],TResult> function, params TInput[] args)
 {
    return function(args);
 }
于 2013-05-03T15:17:16.543 回答
0

我以另一种方式做到了:

public static T ProcessJob<T>(Func<T> function)

为了调用,我使用 lambda 表达式来实例化该函数:

Func<string> Test = () => return TestFunction(Param1, Param2, Param3);
AsyncJobHelper.ProcessJob(Test);

看?lambda 表达式可以根据需要接受尽可能多的参数TestFunction

于 2013-05-03T15:34:38.060 回答