我们在工作中一直使用自制的类型,从.NET 3.5开始使用,它与Lazy<T>类做着相同的事情,但允许您重新评估Lazy Func的实例。我们想用新的.NET替换我们的类,但是Clear()或IsDirty机制不存在。
有没有一种方法可以重新初始化Lazy<T> Func方法而不必重新实例化类? 如果没有,是否有一种将其实现为扩展方法的方法,还是这只是一种不好的模式?
我们在工作中一直使用自制的类型,从.NET 3.5开始使用,它与Lazy<T>类做着相同的事情,但允许您重新评估Lazy Func的实例。我们想用新的.NET替换我们的类,但是Clear()或IsDirty机制不存在。
有没有一种方法可以重新初始化Lazy<T> Func方法而不必重新实例化类? 如果没有,是否有一种将其实现为扩展方法的方法,还是这只是一种不好的模式?
因为它无法保证线程安全。那些保证程序员无法修复问题并可能导致错误的类不应该出现在框架中。你可以自己决定是否使用。
Lazy<T>
类中的原因。public class ResettableLazy<T>
{
public T Value => this.Container.Value;
public bool IsValueCreated => this.Container.IsValueCreated;
public void Reset() { this.Container = new Lazy<T>(); }
private Lazy<T> Container = new Lazy<T>();
}
因为这会破坏类型的语义。如果 Lazy<T>
的状态随时间变得无效,您需要考虑使用其他类型。