Есть ли эквивалент для Java класса WeakHashMap в C#?

Есть ли класс C#, который предоставляет карту со слабыми ключами и / или слабыми значениями? Или, по крайней мере, WeakHashMap, как функциональность.

3 ответа

Решение

В.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 и представлен в mscorlib.dll через внутренний DependentHandle состав.

Это означает следующее для вас:

  1. Там нет эквивалента WeakHashMap до.NET 4.
  2. Начиная с.NET 4 и, по крайней мере, до.NET 4.5.1, единственный способ поддерживать функциональность WeakHashMap это использовать ConditionalWeakTable класс (который запечатан).

Дополнительная информация находится в следующем посте:
Можно ли создать по-настоящему слабый словарь в C#?

Ближайший эквивалент платформы, вероятно, Dictionary<K, WeakReference<V>>, То есть это обычный словарь, но со значениями, являющимися слабыми ссылками.

Другие вопросы по тегам