有谁知道为什么Microsoft没有在.NET Framework 4.0中的Lazy <T>类中包含Clear()方法或IsDirty属性或类似内容?(以下更新的问题)
我们使用自.NET 3.5以来一直使用的自制类型,其中我使用与Lazy <T>类相同的东西,但允许您让实例重新评估Lazy Func.我们想用新的.NET替换我们的类,但是这个Clear()或IsDirty机制不存在.
让我根据评论重新解释原始问题.有没有办法重新初始化Lazy <T> Func方法而不重新实现该类?如果没有,是否有办法将其作为扩展方法实现,或者只是一个不好的模式首先要遵循?
因为不可能使它成为线程安全的.那类保证程序员将拍摄他的腿没有任何办法来解决这个问题没有一个框架的归属.你可以自由地射击自己的腿.
小智 5
如果您确实需要重置 Lazy<> 对象,则需要具有创建 Lazy<> 类型的新实例的机制。您可以构建一个包装器,公开与 Lazy<> 类型相同的属性以及简单地重新创建它的 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>();
}
Run Code Online (Sandbox Code Playgroud)
真正的问题是您是否应该这样做,但如果您确实需要这样做,那可能足以满足您的需求。
归档时间: |
|
查看次数: |
4642 次 |
最近记录: |