18

System.Lazy to Lazy Initialization をエンティティで使用したい:

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' has no 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 } }

私は何か間違ったことをしていますか?

4

3 に答える 3

26

次のようなことができます。

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>。new の初期化は new ...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; }
}
于 2011-07-27T13:42:33.443 に答える
6

あなたが何をしようとしているのかは明らかではありません。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; } }
}
于 2011-07-27T13:40:47.867 に答える
2

非遅延ソリューション - 呼び出されたときにのみ初期化されるという点で同じメリットがあります。

    private List<Question> _questions;
    public List<Question> Questions { get { return _questions ?? (_questions = new List<Question>()); } set { _questions = value; } }
于 2012-11-12T02:30:07.160 に答える