0

我有以下代码。在我看来,有一种方法可以将它组合成一个语句,但我不知道该怎么做。

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

是的,您可以一起使用集合和对象初始值设定项来创建项目,将其添加到列表中,并将列表全部包装在一个语句中。

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

上面的缩进样式是我更喜欢将所有卷曲放在自己的一行上的方式,但如果你愿意,你甚至可以单行。

无论哪种方式,它都是一个单一的声明。

顺便说一句,由于你只是将 传递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"
});  

我不会在一个声明中推荐更多。该语句也可以重构为接受参数的方法Valueand 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 SelectList(List items = new List { new SelectListItem{Value="",Text="00"}});

于 2012-05-02T20:49:55.340 回答
0
ViewBag.AccountIdList = new List<SelectListItem>{new SelectListItem{Value = "", Text  = "00"}};
于 2012-05-02T20:52:41.150 回答