2

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

public Func<object, object> FunctionBuilder(object o) 
{ /*build functions, woo*/ }

Func...但是,由于出现在 .net3.5(?) 中,因此在 .net2 中如果不是不可能的话,这似乎非常困难,例如:

public delegate<object> FunctionBuilder(object o) 
{ /*nope*/ }

...不是有效的语法..

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

4

2 回答 2

8

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

绝对可以,但是您需要返回特定的委托类型。

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

public delegate TResult ProjectFunc<T, TResult>(T arg)

接着:

public ProjectFunc<object, object> FunctionBuilder(object o)

然后,如果/当您的项目迁移到 .NET 3.5 时,您可以删除ProjectFuncFunc改为使用。我们在 Noda Time 中采用了这种精确的方法(实际上现在无论如何都使用 .NET 3.5)并且效果很好。

于 2013-04-24T10:47:44.787 回答
0

你应该使用这个构造。

delegate object MyDelegate(object);

MyDelegate FunctionBuilder()
{

}
于 2013-04-24T10:47:44.850 回答