如何使用系统.用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 } }
我做错了什么?
你可以这样做:
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; } }