[英]Efficient Way to Populate a List - ASP.NET MVC3
我是RoR的ASP.NET MVC 3的新手,所以我對MVC設計模式有些熟悉。
我創建了一個方法,該方法生成將在dropdownfor()中使用的選擇列表。
我下面的內容有用,但是我想知道我是否可以提高效率,或者至少用更少的代碼做同樣的事情?
謝謝
public static IEnumerable<SelectListItem> GetDistanceUnits(string distanceUnit)
{
DistanceUnit MilesUnit = new DistanceUnit();
MilesUnit.OptionValue = "mi";
MilesUnit.OptionName = "Miles";
MilesUnit.OptionSelected = "";
DistanceUnit KilometersUnit = new DistanceUnit();
KilometersUnit.OptionValue = "km";
KilometersUnit.OptionName = "Kilometers";
KilometersUnit.OptionSelected = "";
var distanceUnitList = new List<SelectListItem>();
distanceUnitList.Add(new SelectListItem
{
Value = MilesUnit.OptionValue,
Text = MilesUnit.OptionName,
Selected = MilesUnit.OptionSelected == distanceUnit
});
distanceUnitList.Add(new SelectListItem
{
Value = KilometersUnit.OptionValue,
Text = KilometersUnit.OptionName,
Selected = KilometersUnit.OptionSelected == distanceUnit
});
return distanceUnitList.OrderByAscending(c => c.Text);
}
您可以使用清單初始化器將代碼壓縮得更多:
var distanceUnitList = new List<SelectListItem> {
new SelectListItem {
Value = MilesUnit.OptionValue,
Text = MilesUnit.OptionName,
Selected = MilesUnit.OptionSelected == distanceUnit
},
new SelectListItem {
Value = KilometersUnit.OptionValue,
Text = KilometersUnit.OptionName,
Selected = KilometersUnit.OptionSelected == distanceUnit
}
};
否則,我會說這是一種非常緊湊的方法,組織得很好,並且可以在您的MVC應用程序的其他領域中非常重用。
您可以使用生成器來創建列表,而可以使用一些Linq
來投影列表。
public static IEnumerable<SelectListItem> GetDistanceUnits(string distanceUnit)
{
var distanceUnitList = GetUnits()
.Select(u =>
new SelectListItem
{
Value = u.OptionValue,
Text = u.OptionName,
Selected = u.OptionSelected == distanceUnit
})
.OrderByAscending(c => c.Text)
.ToList();
return distanceUnitList;
}
private static IEnumerable<DistanceUnit> GetUnits()
{
yield return new DistanceUnit
{
OptionValue = "mi";
OptionName = "Miles";
OptionSelected = "";
};
yield return new DistanceUnit
{
OptionValue = "km";
OptionName = "Kilometers";
OptionSelected = "";
};
}
您可以用更少的代碼來實現,但是我不確定它會提高多少效率:
var distanceUnitList = new List<SelectListItem>
{
new SelectListItem{...},
new SelectListItem{...},
};
如果只使用一次這些局部變量(以將數據提供給SelectListItem),則不需要它們。 您可以執行以下操作:
var distanceUnitList = new List<SelectListItem>() {
new SelectListItem
{
Value = "mi",
Text = "Miles",
Selected = ("" == distanceUnit) // odd code...
},
new SelectListItem
{
Value = "km",
Text = "Kilometers",
Selected = ("" == distanceUnit)
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.