ln.types/WeakHashValue.cs

32 lines
707 B
C#

using System;
namespace ln.types
{
class WeakHashValue<T> where T:class
{
readonly int keyHashCode;
WeakReference<T> reference;
public T Value => reference.TryGetTarget(out T target) ? target : null;
public bool IsStrong => reference.TryGetTarget(out T target);
public WeakHashValue(T value)
{
reference = new WeakReference<T>(value);
keyHashCode = value.GetHashCode();
}
public override int GetHashCode() => keyHashCode;
public override bool Equals(object obj)
{
T value = Value;
if ((value != null) && (obj is WeakHashValue<T>))
{
WeakHashValue<T> other = obj as WeakHashValue<T>;
return object.Equals(value,other.Value);
}
return false;
}
}
}