如何在.NET Framework 2.0中模拟"Func <(Of <(TResult>)>)委托"?

Mag*_*nus 16 .net c#

我尝试使用VB.NET中的CodeProject文章和.NET Framework 2.0中的类.

除了这一行Private _workerFunction As Func(Of TResult)和方法标题之外,似乎所有东西都要编译Public Sub New(ByVal worker As Func(Of TResult)).

我可以在MSDN上找到这些新代理(Func(Of ...)从.NET 3.5支持.

如何重写它以在.NET 2.0中工作?

Kon*_*man 22

幸运的是,.NET 2.0已经支持泛型,因此您可以使用相同的签名创建自己的委托:

public delegate T Func<T>();
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 19

正如Konamiman所说,您可以非常轻松地声明自己的委托类型.在我的"版本"页面上,我将它们全部声明,以便您可以剪切并粘贴它们:

public delegate void Action();
public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T arg);
public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
Run Code Online (Sandbox Code Playgroud)

(我没有避免在这里滚动,因为你可能不想在IDE中使用换行符.注意这Action<T>是.NET 2.0的一部分,因此它不在上面.)