gpt4 book ai didi

c# - 如何使用 System.Lazy 和 Setter 来延迟初始化 POCO 实体中的列表?

转载 作者:IT王子 更新时间:2023-10-29 04:47:51 25 4
gpt4 key购买 nike

我想在我的实体中使用 System.Lazy 来延迟初始化我的列表:

public class Questionary
{
private Lazy<List<Question>> _questions = new Lazy<List<Question>>(() => new List<Question>());

public IList<Question> Questions { get { return _questions.Value; } set { _questions.Value = value; } }
}

问题出在我的 SETTER 上,得到这个错误:The property ' System.Lazy<T>.Value ' 没有二传手

如果我想做MyInstance.Questions = new List<Question> { ... }

我该如何继续?

更新:

我正在努力避免这种情况:

private IList<Question> _questions;

//Trying to avoid that ugly if in my getter:
public IList<Question> Questions { get { return _questions == null ? new List<Question>() : _questions; } set { _questions = value } }

我做错了什么?

最佳答案

你可以这样做:

public class Questionary
{
private Lazy<IList<Question>> _questions =
new Lazy<IList<Question>>(() => new List<Question>());

public IList<Question> Questions
{
get { return _questions.Value; }
set { _questions = new Lazy<IList<Question>>(() => value); }
}
}

但是,我不明白你为什么需要 Lazy<T>在这里。使用它没有任何好处,因为新的 List<T> 的初始化应该与新的 Lazy<T> 的初始化相同...

我认为保持它这么简单就足够了:

public class Questionary
{
private IList<Question> _questions = new List<Question>();

public IList<Question> Questions
{
get { return _questions; }
set { _questions = value; }
}
}

public class Questionary
{
public Questionary()
{
Questions = new List<Question>();
}

public IList<Question> Questions { get; set; }
}

关于c# - 如何使用 System.Lazy 和 Setter 来延迟初始化 POCO 实体中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845261/

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