public override bool IsAlive() { if (target.IsAlive()) { return(true); } return(false); }
public override bool ContainsKey(K key) { _accessCounter++; WeakReference <V> wv = _dict.TryGetValue(key, null); if (wv != null) { if (wv.IsAlive()) { return(true); } else { _dict.Remove(key); } } return(false); }
public override void Add(K key, V value) { _accessCounter += 4; WeakReference <V> wv = _dict.TryGetValue(key, null); if (wv != null) { if (wv.IsAlive() || wv == WeakNull) { throw new KeyAlreadyExistsException(); } else if (value != null) { wv.SetTarget(value); return; } } _dict[key] = value == null ? WeakNull : new WeakReference <V>(value); }