为什么 Lazy<T> 不懒惰?

Why is Lazy<T> not being lazy?

我有几个使用 Entity Framework 的简单数据库查询,我想使用 Lazy<T> 加载一次,但我可以看到每次调用 属性 时都会执行查询。我尝试过的变化是:

public static IEnumerable<string> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name)).Value;

public static IEnumerable<string> Foos=> new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray()).Value;

public static Lazy<IEnumerable<string>> Foos => new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());

public static IEnumerable<string> LightingEnvironments
{
    get
    {
        var lazy = new Lazy<IEnumerable<string>>(() => _db.Foos.Select(x => x.Name).ToArray());
        return lazy.Value;
    }
}

每次调用 属性 getter 时,您都在构建一个新的 LazyLazy 仅允许您重复使用已构建的值,前提是您 Lazy 实例保持在 周围并调用 Value 属性 在同一个 Lazy 实例上 每次您需要该值时。