public override bool Equals(object obj)
{
var thisInstance = this.IsAlive ? this.Target : this;
var referenceEqualWeakReference = obj as WeakReference;
if (referenceEqualWeakReference != null && referenceEqualWeakReference.IsAlive)
{
obj = referenceEqualWeakReference.Target;
}
return ReferenceEquals(thisInstance, obj);
}