c# - 为什么Lazy <T>不懒惰?

标签 c# lazy-initialization

我有几个使用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属性时,才允许您重新使用已构造的值。

关于c# - 为什么Lazy <T>不懒惰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45444420/

相关文章:

c# - C# 中泛型 Lazy 类的协变使用

java - 如何在 Java 中为成员 arraylist 变量实现惰性初始化?

java - JPA 延迟获取列表调用 setter 中的 SELECT 查询

c# - 是否可以更改 Resharper 4.5 在 aspx/ascx 文件中格式化代码的方式?

c# - 使字符串中的小写大写和大写小写

c# - 处理异常 .NET MVC 保留表单数据

c# - 以非常特定的顺序对字符串列表进行排序

c# - ASP.Net Core 2.1 中间件 WindowsPrincipal ClaimsPrincipal

java - 延迟初始化启用了 CardLayout?

spring - 如何在 Spring Boot 中设置惰性初始化的默认行为?