有没有人知道为什么微软没有在Lazy< Lazy<中添加Clear()方法或IsDirty属性等等。 T> .NET Framework 4.0中的类? (以下更新的问题)
我们有一个自从.NET 3.5以来一直使用的自制类型,我工作时与Lazy< T> class还允许您让实例重新评估Lazy Func。我们想用新的.NET替换我们的类,但是这个Clear()或IsDirty机制不存在。
让我根据评论重新解释原始问题。有没有办法重新初始化Lazy< T>没有重新实现类的Func方法?如果没有,是否有办法将其作为一种扩展方法来实现,或者只是一个不好的模式?
答案 0 :(得分:10)
因为不可能使其成为线程安全的。 保证程序员无需任何方法来解决问题的程序员不属于框架。你可以自由地射击自己的腿。
答案 1 :(得分:7)
你想要做的不是延迟初始化,它是另一回事。这就是为什么它不在Lazy<T>
类。
答案 2 :(得分:5)
因为这会破坏该类型的语义。如果Lazy<T>
的状态随着时间的推移变得无效,则需要考虑其他类型。
答案 3 :(得分:3)
如果您确实需要重置Lazy&lt;&gt;对象你需要有机制来创建Lazy&lt;&gt;的新实例类型。您可以构建一个包含暴露与Lazy&lt;&gt;相同属性的包装器。 type plus Reset-method,它只是重新创建它。简单来说,它就像是:
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>();
}
真正的问题是你应该做那样的事情,但如果你真的需要这样做可能足以满足你的需要。
答案 4 :(得分:1)
IsValueCreated不适合你吗?