是否有提供带有弱键或/和弱值的映射的 C# 类?或者至少类似于 WeakHashMap 的功能。
问问题
5703 次
3 回答
18
在 .Net 3.5 及更低版本中,没有这样的结构可用。但是我为一个附带项目编写了一个并将代码发布在以下位置。
ConditionalWeakTable
从 .NET 4.0 开始,在 Runtime.CompilerServices 命名空间中 有一个可用的结构,它也可以解决问题。
于 2010-01-17T16:27:52.647 回答
8
在 .NET 4 之前,CLR 没有提供实现这种形式的映射所需的功能。特别是,Java 提供了ReferenceQueue<T>
类,WeakHashMap
用于管理映射中的弱键。由于 .NET 中没有与此类等效的类,因此没有干净的方法来构建等效的Dictionary
.
在 .NET 4 中,ConditionalWeakTable<TKey, TValue>
为了提高 CLR 支持动态语言的能力,添加了一个新类。此类使用一种新型垃圾收集句柄,它在 CLR 本身内部实现,并通过内部DependentHandle
结构暴露在 mscorlib.dll 中。
这对您意味着以下内容:
- 没有
WeakHashMap
与 .NET 4 之前的等价物。 - 从 .NET 4 开始,并至少持续到 .NET 4.5.1,支持 .NET 功能的唯一方法
WeakHashMap
是使用ConditionalWeakTable
类(它是密封的)。
其他信息可在以下帖子中找到:
是否可以在 C# 中创建真正的弱键字典?
于 2013-11-09T20:38:01.187 回答
6
最接近的平台等价物可能是Dictionary<K, WeakReference<V>>
. 也就是说,它只是一个常规字典,但其值是弱引用。
于 2010-01-17T16:01:58.073 回答