我有以下代码。在我看来,有一种方法可以将它组合成一个声明,但我不知道如何做到这一点。
List<SelectListItem> items = new List<SelectListItem>();
var emptyItem = new SelectListItem(){
Value = "",
Text = "00"
};
items.Add(emptyItem);
ViewBag.AccountIdList = new SelectList(items);
有人可以告诉我是否可以简化这一点。
谢谢,
答案 0 :(得分: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"
}
});
在这种情况下两者都会有相同的效果,后者效率更高,但两者都很好,这取决于你喜欢的。有关更多信息,我做了一个简短的博客文章,比较了返回single item as an IEnumerable<T>
sequence的不同方法。
答案 1 :(得分:2)
ViewBag.AccountIdList = new SelectList(new List<SelectListItem> { new SelectListItem { Value = "", Text = "00"} });
答案 2 :(得分:1)
试试这个:
var items = new List<SelectListItem>()
{
new SelectListItem { Value = "", Text = "00" }
}
ViewBag.AccountIdList = new SelectList(items);
答案 3 :(得分:0)
这样的东西就是你能得到的最接近的东西。
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem(){
Value = "",
Text = "00"
});
ViewBag.AccountIdList = new SelectList(items);
答案 4 :(得分:0)
少可读可测试,IMO ......但你可以写:
items.Add(new SelectedListItem(){
Value = "",
Text = "00"
});
我不会在一个声明中推荐更多。此语句也可以重构为接受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"));
答案 5 :(得分:0)
ViewBag.AccountIdList = new SelectList(List items = new List {new SelectListItem {Value =“”,Text =“00”}});
答案 6 :(得分:0)
ViewBag.AccountIdList = new List<SelectListItem>{new SelectListItem{Value = "", Text = "00"}};