gpt4 book ai didi

c# - 惰性属性初始化在 C# 中不起作用

转载 作者:行者123 更新时间:2023-12-02 16:06:12 25 4
gpt4 key购买 nike

我在使用 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 之前将其 bool 值 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

关于c# - 惰性属性初始化在 C# 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69321354/

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