在VS2012中,HashSet<T>去哪了?

9
我最近安装了VS2012。一个在VS2010下编译成功的C++项目(使用.Net 4.0),在VS2012下无法识别HashSet<T>。我甚至尝试了以下声明:
System::Collections::Generic::HashSet< String^ >^ _reasons;

但是这只会导致错误:
error C2039: 'HashSet' : is not a member of 'System::Collections::Generic

文档显示该功能在System.Collections.Generic中。然而C++编译器并不认为如此。你有任何想法它去了哪里吗?

2
一个带有 .Net 4.0 的 C++ 项目。哎呀,在普通的 C++ 中,有 unordered_set - Bartek Banachewicz
4
你是否已经引用了System.Core程序集?System::Collections::Generic命名空间存在于多个程序集中,如果你引用其中一个程序集但不是包含HashSet的程序集,则会得到该错误消息。 - David Yaw
明确添加了 System.Core 作为参考。问题解决了。谢谢 David! - Rob R
1个回答

13

HashSet<>是.NET的一个后期添加功能,它在.NET 3.5中可用。该命名空间较旧,mscorlib.dll自.NET 2.0以来就包含了System::Collections::Generic类,例如Stack<>和Queue<>。 HashSet<>在.NET 3.5的程序集System.Core.dll中添加,他们不想对2.0程序集进行调整。

因此,您必须添加对System.Core的引用才能避免出现错误消息。

当出现此类错误时,请始终参考MSDN文档,它会显示所需的程序集引用。


谢谢Hans。我没有意识到需要添加一个新的引用,因为我没有改变我编译的.Net框架。现在我知道了。 - Rob R
你确实做了。你将目标从2.0更改为3.5,这是唯一具有System.Core的版本。C++ IDE在这方面并不像C#或VB.NET IDE那样复杂。这在C++工具中非常典型,它假定你知道自己在做什么。 - Hans Passant
2
很棒的答案,但为了帮助像我这样的新C++用户,以下是我查找修复方法时参考的内容:#using <System.Core.dll> - Mizmor

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