使用.net2返回委托的方法

Izz*_*zzy 1 .net c# delegates anonymous-delegates .net-2.0

我一直在.net 4工作,真的很享受从单一方法返回定制函数的能力,例如:

public Func<object, object> FunctionBuilder(object o) 
{ /*build functions, woo*/ }
Run Code Online (Sandbox Code Playgroud)

...但是,如果不是不可能在.net2中执行,这似乎非常困难,因为Func出现在.net3.5(?)中,类似于:

public delegate<object> FunctionBuilder(object o) 
{ /*nope*/ }
Run Code Online (Sandbox Code Playgroud)

...是无效的语法..

甚至可以从.net2中的方法返回定制函数吗?

Jon*_*eet 7

甚至可以从.net2中的方法返回定制函数吗?

当然,但您需要返回特定的委托类型.

最简单的事情可能是声明自己的通用委托,例如

public delegate TResult ProjectFunc<T, TResult>(T arg)
Run Code Online (Sandbox Code Playgroud)

然后:

public ProjectFunc<object, object> FunctionBuilder(object o)
Run Code Online (Sandbox Code Playgroud)

然后,如果/当您的项目转移到.NET 3.5时,您可以删除ProjectFunc并使用Func.我们在Noda Time中采用了这种精确的方法(实际上现在使用的是.NET 3.5)并且它运行良好.