Aca*_*uza 18 .net c# entity-framework lazy-initialization c#-4.0
我想在我的Entites中使用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上,得到这个错误:属性' 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 } }
我做错了什么?
Dan*_*rth 25
你可以这样做:
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; }
}
目前尚不清楚你要做什么.你不能设置a的值Lazy<T>- 就这么简单.您只能向它请求一个值,它将执行您在第一次请求值时提供的委托.
你真的需要班上的二传手吗?也许你只想要:
public class Questionary
{
    private Lazy<List<Question>> _questions = 
        new Lazy<List<Question>>(() => new List<Question>());
    public IList<Question> Questions { get { return _questions.Value; } }
}
| 归档时间: | 
 | 
| 查看次数: | 9150 次 | 
| 最近记录: |