public bool Equals(IWeakEventSubscriber <TEventArgs> r) { if (_reference == null || r.GetHashCode() != _hashCode) { return(false); } return(_reference.TryGetTarget(out var target) && target == r); }
public bool TryGetTarget([MaybeNullWhen(false)] out IWeakEventSubscriber <TEventArgs> target) { if (_reference == null) { target = null !; return(false); } return(_reference.TryGetTarget(out target)); }
public Entry(IWeakEventSubscriber <TEventArgs> r) { if (r == null) { _reference = null; _hashCode = 0; return; } _hashCode = r.GetHashCode(); _reference = new WeakReference <IWeakEventSubscriber <TEventArgs> >(r); }
public void Remove(IWeakEventSubscriber <TEventArgs> s) { var removed = false; for (int c = 0; c < _count; ++c) { var reference = _data[c]; if (reference != null && reference.TryGetTarget(out var instance) && instance == s) { _data[c] = null; removed = true; } } if (removed) { ScheduleCompact(); } }