【问题标题】:Lazy tag is not working as supposed to be - Lazy is not lazy - initialized before used / called懒惰标签没有按预期工作 - 懒惰不是懒惰 - 在使用/调用之前初始化
【发布时间】:2022-12-25 10:21:30
【问题描述】:

我打算使用具有以下内容的 .NET Core 6 WPF 应用程序进行延迟初始化。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    Lazy<List<int>> myNumbersList = new Lazy<List<int>>(Enumerable.Range(1, 99999999)
    .Select(x => x).ToList());

    List<int> myNumbersList2 = new List<int>(Enumerable.Range(1, 99999999)
    .Select(x => x).ToList());
}

它们甚至在调用 WPF 的 MainWindow 的构造函数之前就已初始化。

lazy 不是应该在每次使用时都初始化吗?

【问题讨论】:

  • 是的,属性已初始化,但 lambda 不会执行,除非您调用 .Value... 编辑:哦,您没有传递表达式。您传递了一个值,调用了错误的构造函数。在构造函数参数前加上() =&gt;
  • Lazy 已初始化,您构造了它,但其背后的东西 List 却没有。您可能想要检查 Lazy 实例上的 IsValueCreated 属性以查看您自己。
  • 通用类型不是“标签”,C# 也不是 HTML ...

标签: c# .net .net-core .net-6.0 lazy-initialization


【解决方案1】:

您正在使用 Lazy ctor 接受预初始化值:

Lazy&lt;T&gt;(T)
使用预先初始化的指定值初始化 Lazy 类的新实例。
参数
价值T
要使用的预初始化值。

您可能正在寻找 one 接受 Func&lt;T&gt; 值工厂:

Lazy&lt;T&gt;(Func&lt;T&gt;)
初始化 Lazy&lt;T&gt; 类的新实例。当发生惰性初始化时,使用指定的初始化函数。
参数
价值工厂Func&lt;T&gt;
在需要时调用以生成延迟初始化值的委托。

Lazy<List<int>> myNumbersList = new Lazy<List<int>>(() => Enumerable.Range(1, 99999999)
   .Select(x => x).ToList());

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多