Obtenir la liste des éléments actifs de ConditionalWeakTable

Le .NET 4.0 ConditionalWeakTable est effectivement un dictionnaire dans lequel les clés du dictionnaire sont référencées faiblement et peuvent être collectées, ce qui est exactement ce dont j’ai besoin. Le problème est que je dois pouvoir extraire toutes les clés vivantes de ce dictionnaire, mais MSDN déclare :

Il n’inclut pas toutes les méthodes (telles que GetEnumerator ou Contains) qu’un dictionnaire possède généralement.

Existe-t-il une possibilité de récupérer les clés actives ou les paires clé-valeur d’un ConditionalWeakTable ?

J’ai fini par créer mon propre wrapper:

 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.ComstackrServices; public sealed class ConditionalHashSet where T : class { private readonly object locker = new object(); private readonly List weakList = new List(); private readonly ConditionalWeakTable weakDictionary = new ConditionalWeakTable(); public void Add(T item) { lock (this.locker) { var reference = new WeakReference(item); this.weakDictionary.Add(item, reference); this.weakList.Add(reference); this.Shrink(); } } public void Remove(T item) { lock (this.locker) { WeakReference reference; if (this.weakDictionary.TryGetValue(item, out reference)) { reference.Target = null; this.weakDictionary.Remove(item); } } } public T[] ToArray() { lock (this.locker) { return ( from weakReference in this.weakList let item = (T)weakReference.Target where item != null select item) .ToArray(); } } private void Shrink() { // This method prevents the List from growing indefinitely, but // might also cause a performance problem in some cases. if (this.weakList.Capacity == this.weakList.Count) { this.weakList.RemoveAll(weak => !weak.IsAlive); } } }