16

是否有提供带有弱键或/和弱值的映射的 C# 类?或者至少类似于 WeakHashMap 的功能。

4

3 回答 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 中。

这对您意味着以下内容:

  1. 没有WeakHashMap与 .NET 4 之前的等价物。
  2. 从 .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 回答