1

现在是 2013 年,一个主要的平台咳嗽Unity3d咳嗽似乎仍然部分停留在 2.x 上(最新的 Unity 更新,但对于某些功能来说还不是生产质量)。在 3.5 之前,该语言似乎缺少很多东西——例如 Func 和 Action——所以我试图找到一种不使用 3.x 的方法来做到这一点。

这是 3.x 的一个很棒、非常简洁的解决方案:使用 C# 将方法作为参数传递

我尝试了 Microsoft 的网站,但它目前拒绝提供任何早于 4.5 的文档(几周前还在工作,但现在他们的 Javascript 总是出错:()。

... 2.x 中的等价物是什么?还是没有办法做到这一点(悲伤的脸)?


或者:我是否遗漏了一些关于使用 Func 的明显内容?我收到编译器错误,它是一个未定义的符号,并且我使用的上下文与我在所有不同的在线资源/示例中找到的上下文相同:(

4

2 回答 2

2

区分语言版本平台版本很重要……以及类似的功能。目前,您正在混淆各个方面。

Func并且Action根本不是 C# 语言的一部分——它们只是属于 .NET 框架的委托类型。如果您使用的框架版本不包含您想要的委托类型,只需声明您自己的。我建议将它们命名为与 .NET不同的名称,这样以后升级就无关紧要了——不会有任何命名冲突。所以:

public delegate void MyAction();
public delegate void MyAction<T>(T input);
... etc

然后,一旦相关类型到位,您就可以正常使用方法组转换:

public void DoSomething(MyAction<string> action) { ... }

public void Foo(string text) { ... }

...

DoSomething(Foo);
于 2013-08-14T19:53:14.733 回答
1

使用代表!这里有一些链接

http://msdn.microsoft.com/en-us/library/ms173171(v=vs.90).aspx http://msdn.microsoft.com/en-us/library/aa288459(v=vs.71) .aspx

于 2013-08-14T19:52:37.137 回答