如何使用系统.用Setter延迟初始化POCO实体中的列表

本文关键字:实体 POCO 列表 初始化 延迟 何使用 系统 Setter | 更新日期: 2023-09-27 18:03:47

我想使用System。从惰性到惰性初始化:

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上,得到这个错误:属性' System.Lazy<T>.Value '没有SETTER

如果我想做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 } }

我做错了什么?

如何使用系统.用Setter延迟初始化POCO实体中的列表

你可以这样做:

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; }
}

不清楚你想做什么。你不能设置Lazy<T>的值——就这么简单。你只能请求一个值,它会在第一次请求值时执行你提供的委托。

你真的需要在你的类中设置setter吗?也许你只是想:

public class Questionary
{
    private Lazy<List<Question>> _questions = 
        new Lazy<List<Question>>(() => new List<Question>());
    public IList<Question> Questions { get { return _questions.Value; } }
}

非延迟解决方案-仅在调用时初始化的好处相同:

    private List<Question> _questions;
    public List<Question> Questions { get { return _questions ?? (_questions = new List<Question>()); } set { _questions = value; } }