0

次のコードがあります。それを1つのステートメントに組み合わせる方法があるように見えますが、これを行う方法がわかりません。

List<SelectListItem> items = new List<SelectListItem>();

var emptyItem = new SelectListItem(){
    Value = "",
    Text  = "00"
};

items.Add(emptyItem);

ViewBag.AccountIdList = new SelectList(items);

これを単純化できるかどうか誰か教えてください。

ありがとう、

4

7 に答える 7

8

はい、コレクションとオブジェクトの初期化子を一緒に使用して、アイテムを作成し、リストに追加して、リストをすべて1つのステートメントにラップすることができます。

ViewBag.AccountIdList = new SelectList(
    new List<SelectListItem>
    {
         new SelectListItem
         {
            Value = "",
            Text = "00"
         }
    });

上記のインデントスタイルは、すべてのカーリーを独自の行に入力する方法ですが、必要に応じて1行にすることもできます。

いずれにせよ、それは単一のステートメントです。

ちなみに、を取得List<SelectListItem>するSelectListコンストラクターにを渡すだけなIEnumerableので、パフォーマンスを少し向上させるために、リストの代わりに1の配列を渡すことができます。

ViewBag.AccountIdList = new SelectList(
    new []
    {
         new SelectListItem
         {
            Value = "",
            Text = "00"
         }
    });

この場合、どちらも同じように機能します。後者の方が少し効率的ですが、どちらも問題なく、どちらを使用するかはあなた次第です。詳細については、単一のアイテムをIEnumerable<T>シーケンスとして返すさまざまな方法を比較する短いブログエントリを作成しました。

于 2012-05-02T20:47:26.290 に答える
2
ViewBag.AccountIdList = new SelectList(new List<SelectListItem> { new SelectListItem { Value = "", Text = "00"} });
于 2012-05-02T20:47:51.833 に答える
1

これを試して:

var items = new List<SelectListItem>()
{
   new SelectListItem { Value = "", Text = "00" }
}

ViewBag.AccountIdList = new SelectList(items);
于 2012-05-02T20:47:43.050 に答える
0

このようなものはあなたがそれを得ることができる最も近いでしょう。

List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem(){
    Value = "",
    Text  = "00"
});
ViewBag.AccountIdList = new SelectList(items);
于 2012-05-02T20:47:35.827 に答える
0

読みにくいテスト可能、IMO ...しかし、次のように書くことができます。

items.Add(new SelectedListItem(){
    Value = "",
    Text  = "00"
});  

1つのステートメントでこれ以上はお勧めしません。Valueこのステートメントは、およびのパラメーターを受け入れるメソッドにリファクタリングすることもできますText

// now this is a unit testable method
SelectedListItem CreateSelectedItem (string value, string text) {
   return new SelectedListItem(){
        Value = value,
        Text  = text
    };
}

これで、簡潔にしながら、それが何をするかについて非常に明確な次のように書くことができます。

ViewBag.AccountIdList = new SelectList(items.Add(CreateSelectedItem("someValue", "someText"));
于 2012-05-02T20:48:43.770 に答える
0
ViewBag.AccountIdList = new List<SelectListItem>{new SelectListItem{Value = "", Text  = "00"}};
于 2012-05-02T20:52:41.150 に答える
0

ViewBag.AccountIdList = new SelectList(List items = new List { new SelectListItem{Value="",Text="00"}});

于 2012-05-02T20:49:55.340 に答える