Dan*_*rry 12 .net c# collections multithreading concurrent-collections
是否有一个C#类提供弱键或/和弱值的映射?或至少WeakHashMap之类的功能.
Jar*_*Par 17
在.Net 3.5及更低版本中,没有这样的结构可用.但是我为一个辅助项目编写了一个,并将代码发布在以下位置.
从.NET 4.0开始,ConditionalWeakTable在Runtime.CompilerServices命名空间中调用了一个可用的结构.
在.NET 4之前,CLR没有提供实现此表单映射所需的功能.特别是,Java提供了ReferenceQueue<T>类,WeakHashMap用于管理映射中的弱键.由于.NET中没有与此类相同的内容,因此没有简洁的方法来构建等效项Dictionary.
在.NET 4中,ConditionalWeakTable<TKey, TValue>添加了一个新类,作为提高CLR支持动态语言的能力的一部分.此类使用新类型的垃圾收集句柄,该句柄在CLR本身内实现,并通过内部DependentHandle结构在mscorlib.dll中公开.
这意味着以下内容:
WeakHashMap与.NET 4之前的版本相同的版本.WeakHashMap是使用ConditionalWeakTable类(密封).其他信息可在以下文章中找到:
是否可以在C#中创建一个真正弱键的字典?
最接近的平台可能是一个Dictionary<K, WeakReference<V>>.也就是说,它只是一个普通的字典,但值是弱引用.