public override bool Equals(object obj) { return(obj switch { ComparableWeakReference <T> reference => this == reference, WeakReference <T> reference => this == reference, _ => false, });
static bool Predicate(ComparableWeakReference <T> reference, Predicate <T> predicate) { if (reference.TryGetTarget(out T target)) { return(predicate.Invoke(target)); } return(false); }
private static int Comparison(ComparableWeakReference <T> x, ComparableWeakReference <T> y, Comparison <T> comparer) { bool hasX = x.TryGetTarget(out T xTarget); bool hasY = y.TryGetTarget(out T yTarget); if (hasX != hasY) { return(hasX ? int.MaxValue : int.MinValue); } else if (!hasX) { return(0); } return(comparer.Invoke(xTarget, yTarget)); }
public bool Contains(ComparableWeakReference <T> item) { return(_List.Contains(item)); }
public int BinarySearch(ComparableWeakReference <T> item, IComparer <T> comparer) { return(_List.BinarySearch(item, new ReferenceComparer(comparer))); }
int IComparer <ComparableWeakReference <T> > .Compare(ComparableWeakReference <T> x, ComparableWeakReference <T> y) { return(Comparison(x, y, Comparer.Compare)); }
public int BinarySearch(ComparableWeakReference <T> item) { return(_List.BinarySearch(item)); }
public void Add(ComparableWeakReference <T> item) { _List.Add(item); }
public static bool Equals(object objA, ComparableWeakReference <T> objB) { return(objB.Equals(objA)); }
public static bool Equals(WeakReference <T> objA, ComparableWeakReference <T> objB) { return(objA == objB); }
public bool Equals(ComparableWeakReference <T> obj) { return(this == obj); }