在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。
答案 0 :(得分:8)
以下是在mscorlib中定义的 -
Action
Action<T>
但以下是在System.Core中定义的。
Action<T1, T2>
Func<T1, T2>
您可能错过了对该程序集的引用。
答案 1 :(得分:8)
Action
和Func
类型的位置因您使用的框架版本而异。
在3.5框架中,Func
(通用或非通用)的所有定义都驻留在System.Core.dll中。对于具有2个或更多通用参数的Action
版本也是如此。 Action
和Action<T1,T2>
虽然在mscorlib中。
在4.0框架中,Func
和Action
的所有定义都移到了mscorlib。 System.Core中插入了类型转发器,现在指向mscorlib。
Silverlight 4.0更接近3.5框架解决方案。
确保您的解决方案有适当的DLL参考。