是否有一个C#类提供弱键或/和弱值的映射? 或者至少是WeakHashMap之类的功能。
答案 0 :(得分:17)
在.Net 3.5及以下版本中,没有这样的结构。但是我为一个辅助项目编写了一个,并在following location发布了代码。
启动.NET 4.0时,Runtime.CompilerServices命名空间中有一个名为ConditionalWeakTable
的结构,它也可以实现。
答案 1 :(得分:6)
在.NET 4之前,CLR没有提供实现此表单映射所需的功能。特别是,Java提供了ReferenceQueue<T>
类,WeakHashMap
用于管理地图中的弱键。由于.NET中没有与此类相同的内容,因此没有简洁的方法来构建等效的Dictionary
。
在.NET 4中,添加了一个新类ConditionalWeakTable<TKey, TValue>
,作为提高CLR支持动态语言的能力的一部分。此类使用新类型的垃圾收集句柄,该句柄在CLR本身内实现,并通过内部DependentHandle
结构在mscorlib.dll中公开。
这意味着以下内容:
WeakHashMap
。WeakHashMap
功能的唯一方法是使用ConditionalWeakTable
类(密封)。< / LI>
醇>
更多信息见以下帖子:
Is it possible to create a truely weak-keyed dictionary in C#?
答案 2 :(得分:5)
最接近的平台等价物可能是Dictionary<K, WeakReference<V>>
。也就是说,它只是一个普通的字典,但值是弱引用。