2010-02-03 99 views
4

它看起来好像不支持C++/CLI中System命名空间中的Action和Func委托。至少对于多个​​通用参数,如:C++/CLI使用行动<...,...>和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 

只有一个参数动作作品:

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

任何人,知道为什么还是什么缺少使这项工作。我正在使用Visual Studio 2008,该项目有目标框架3.5。

+0

您是否有对System.Core的引用? – 2010-02-03 17:25:52

回答

8

根据您使用的框架版本,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的引用。

+0

确实如此。添加System.Core.dll解决了这些问题。谢谢。 – nietras 2010-02-04 08:14:42

+0

您提到System.Core for 4.0中的类型转发器。你知道如何做到这一点吗? – nietras 2010-02-04 08:25:17

8

以下是mscorlib中定义 -

Action 
Action<T> 

但以下是System.Core程序定义。

Action<T1, T2> 
Func<T1, T2> 

您可能会错过对该程序集的引用。

相关问题