C++/CLI中使用Action<...,...>和Func<...>是否不支持?

6

在C++/CLI中,似乎没有对System命名空间中的Action和Func委托提供支持。至少不支持多个泛型参数,例如:

System::Action<int, int>^ action = nullptr;
System::Func<int, int>^ func = nullptr;

两者都会导致错误,例如:

error C2977: 'System::Action' : too many generic arguments  
error C2955: 'System::Action' : use of class generic requires generic argument list 

只有单个参数的Action有效:

System::Action<int>^ action = nullptr;

有人知道为什么或者缺少什么才能使这个工作起来吗?我正在使用Visual Studio 2008,项目的目标框架是3.5。


你有System.Core的引用吗? - Brandon Cuff
2个回答

10
ActionFunc 类型的位置取决于您使用的框架版本。
在 3.5 框架中,所有 Func(泛型或非泛型)定义位于 System.Core.dll 中。对于具有 2 个或更多泛型参数的 Action 版本也是如此。但 ActionAction<T1,T2> 定义位于 mscorlib 中。
在 4.0 框架中,所有 FuncAction 定义都已移动到 mscorlib 中。现在在 System.Core 中插入了类型转发器,指向 mscorlib。
Silverlight 4.0 更接近于 3.5 框架解决方案。请确保您的解决方案引用了适当的 DLL。

确实如此。添加 System.Core.dll 解决了问题。谢谢。 - nietras
你提到了在4.0中的System.Core中的类型转发器。你知道如何自己实现吗? - nietras

9
以下内容在mscorlib中定义 -
Action
Action<T>

但是以下内容在System.Core中已经定义。
Action<T1, T2>
Func<T1, T2>

您可能缺少对该程序集的引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接