gpt4 book ai didi

c# - 这是使用 .NET 的 System.Lazy 的好方法吗

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:56 27 4
gpt4 key购买 nike

    private Lazy<Image> _headshot = new Lazy<Image>(LoadHeadshotFromHDD);

public Image Headshot
{
get
{
return _headshot.Value;
}
set
{
_headshot = new Lazy<Image>(() => value);
}
}

假设我有一个 Person 类,Headshot 属性在该类中。 Headshot 是从 HDD 加载的,所以我希望它是惰性的,但我也想为该属性实现 setter。我实现这个的方式会有问题吗?我只是不确定我是否正确使用它。

最佳答案

如果对象已经在内存中(在 setter 的情况下),那么使用延迟加载确实没有意义,但这样做完全没问题。我能想到的一件事是,如果你检查 _headshot.IsValueCreated ,它会返回 false,即使您已经在内存中拥有该对象。另一种选择是

private Image _headshot;

public Image Headshot
{
get { return _headshot ?? (_headshot = LoadHeadshotFromHDD()); }
set { _headshot = value; }
}

这将在访问属性时延迟加载头像,就像使用 Lazy<T> 时一样, 但它会直接设置值,所以你可以检查 _headshot != null而不是 _headshot.IsValueCreated .你应该看看 Jon Skeet 的 Singleton Pattern post .

关于c# - 这是使用 .NET 的 System.Lazy 的好方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com