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

时间:2010-02-03 17:12:55

标签: .net generics .net-3.5 delegates c++-cli

在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。

2 个答案:

答案 0 :(得分:8)

以下是在mscorlib中定义的 -

Action
Action<T>

但以下是在System.Core中定义的。

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

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

答案 1 :(得分: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参考。