簡體   English   中英

在C#中是否有Java WeakHashMap類的等價物?

[英]Is there an equivalent for Java WeakHashMap class in C#?

是否有一個C#類提供弱鍵或/和弱值的映射? 或至少WeakHashMap之類的功能。

在.Net 3.5及更低版本中,沒有這樣的結構可用。 但是我為一個輔助項目編寫了一個,並將代碼發布在以下位置

從.NET 4.0開始,Runtime.CompilerServices命名空間中有一個名為ConditionalWeakTable的結構也可以實現。

在.NET 4之前,CLR沒有提供實現此表單映射所需的功能。 特別是,Java提供了ReferenceQueue<T>類, WeakHashMap使用它來管理映射中的弱鍵。 由於.NET中沒有與此類相同的內容,因此沒有簡潔的方法來構建等效的Dictionary

在.NET 4中,添加了一個新類ConditionalWeakTable<TKey, TValue> ,作為提高CLR支持動態語言的能力的一部分。 此類使用新類型的垃圾收集句柄,該句柄在CLR本身內實現,並通過內部DependentHandle結構在mscorlib.dll中公開。

這意味着以下內容:

  1. 在.NET 4之前沒有與WeakHashMap等效的東西。
  2. 從.NET 4開始,至少繼續通過.NET 4.5.1,支持WeakHashMap功能的唯一方法是使用ConditionalWeakTable類(它是密封的)。

其他信息可在以下帖子中找到:
是否有可能在C#中創建一個真正弱鍵的字典?

最接近的平台等價物可能是Dictionary<K, WeakReference<V>> 也就是說,它只是一個普通的字典,但值是弱引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM