4

VB.Net では、これのバリエーションを使用しているため、SearchModel を使用すると、準備が整ったタグの空のリストが作成されます。

Public Class SearchModel
    Public Property Tags As New List(Of TagDetails)
End Class 

単純な変換の結果は次のようになりますが、「タグ」は null です。

public class SearchModel
{
    public List<TagDetails> Tags { get; set; }
}

これは、「タグ」プロパティを作成し、同時に新しい空のリストを作成する受け入れ可能な方法ですか?

public class SearchModel
{
    public List<TagDetails> Tags = new List<TagDetails>();
}

それとも、このセレモニーをすべて通過する必要がありますか?

public class SearchModel
{
  private List<TagDetails> _TagDetails;
    public List<TagDetails> Tags
    {
        get { return _TagDetails ?? (_TagDetails = new List<TagDetails>()); }
        set { _TagDetails = value; }
    }
}
4

5 に答える 5

8

従来の方法では、コンストラクターを使用しています。

public class SearchModel
{
    public SearchModel()
    {
        Tags = new List<TagDetails>();
    }
    public List<TagDetails> Tags { get; set; }
}
于 2012-10-10T21:43:29.540 に答える
5

コンストラクターでインスタンス化します。

public class SearchModel
{
    public List<TagDetails> Tags { get; set; }

    public SearchModel()
    {
        Tags = new List<TagDetails>();
    }

    public SearchModel(List<TagDetails> tagDetails)
    {
        Tags = tagDetails;
    }
}

ほとんどのコードが C# であったため、C# で行いました。自動プロパティをそのままにしておくことができます。使用するリストを受け取るオーバーロードされたコンストラクターを追加することもできます (不要な場合は削除してください)。

于 2012-10-10T21:42:45.717 に答える
0

リストの遅延インスタンス化を維持したい場合:

public class SearchModel
{
  private Lazy<List<TagDetails>> tags = new Lazy(() => new List<TagDetails>());

  public List<TagDetails> Tags
  {
    get { return this.tags.Value; }
  }
}

ただし、これでは値を設定できません。

于 2012-10-10T22:02:09.883 に答える
0

具象リスト クラスをまったく公開しないことについても、適切な議論があります。セッターが賢明かどうかは確かに疑問です。オブジェクトの寿命とガベージコレクターに関しては、正しい混乱が生じる可能性があります。

public class SearchModel
{
    private List<TagDetails> _tags;

    public SearchModel()
    {
        _tags = new List<TagDetails>();
    }

    public IEnumerable<TagDetails> Tags {get {return _tags;}}

}

私の最初の試みであり、その後、必要な他のリストタイプのメソッド、クリア、追加などを追加しました。

于 2012-10-10T21:55:56.883 に答える
0

最も簡単な変換は次のとおりです (これは、VB が舞台裏で行っていることです)。

public class SearchModel
{
    private List<TagDetails> _Tags = new List<TagDetails>();
    public List<TagDetails> Tags
    {
        get
        {
            return _Tags;
        }
        set
        {
            _Tags = value;
        }
    }
}
于 2012-10-10T21:51:24.913 に答える