延迟 属性 初始化在 C# 中不起作用

Lazy property initialization not working in C#

我在使用 this documentation 中描述的方法初始化 class 中的属性时遇到问题。

样本:

public class MyClass
{
    private Lazy<string> _lazyString;

    public MyClass()
    {
        _lazyString = new Lazy<string>(() => "hello world");
    }

    public string MyString => _lazyString.Value;
}

当我调试时,我可以看到 _lazyString 在我访问 MyString 属性 之前将其布尔值 IsCreated 设置为 true。最近的 c# 迭代有什么变化吗?

我的目标框架是netcoreapp3.1

按预期工作。

正如@Progman 所指出的那样,使用调试器进行测试的问题在于,悬停该值会触发惰性操作。

要真正测试这种情况下的惰性,您可以使用 Lazy.IsValueCreated 属性。

用下面的代码可以看到

static void Main(string[] args)
{

    MyClass c = new MyClass();
    Console.WriteLine($"MyString not yet called.");
    Console.WriteLine($"Is value created? {c.IsValueCreated}");
    var s = c.MyString;
    Console.WriteLine($"MyString called.");
    Console.WriteLine($"Is value created? {c.IsValueCreated}");
}

public class MyClass
{
    private Lazy<string> _lazyString;

    public MyClass()
    {
        _lazyString = new Lazy<string>(() => "hello world");
    }

    public string MyString => _lazyString.Value;

    public bool IsValueCreated => _lazyString.IsValueCreated;

}

输出:

MyString not yet called. 
Is value created? False 
MyString called. 
Is value created? True