Мне трудно понять следующий код C #.Этот код был взят из Pro ASP.NET MVC 2 Framework Стивеном Сандерсоном.Код по существу создает URL-адреса на основе списка категорий.
Вот код:
Func<string, NavLink> makeLink = categoryName => new NavLink {
Text = categoryName ?? "Home",
RouteValues = new RouteValueDictionary(new {
controller = "Products",
action = "List",
category = categoryName,
page = 1
}),
IsSelected = (categoryName == currentCategory)
Здесь много чего происходит.Я предполагаю, что он определяет функцию, которая ожидает два параметра типа string и NavLink.Тогда я вижу лямбду categoryName => new NavLink etc...
.Я думаю, что все, что он делает - это создает экземпляр NavLink
.
. Затем вызывается функция в том же действии контроллера:
// Place home link on top
List<NavLink> navLinks = new List<NavLink>();
navLinks.Add(makeLink(null));
// Add link for each distinct category
var categories = productsRepository.Products.Select(x => x.Category.Name);
foreach (string categoryName in categories.Distinct().OrderBy(x => x))
navLinks.Add(makeLink(categoryName));
.,Я не понимаю, почему Стивен Сандерсон написал это так.Разве он не мог написать что-то вроде:
var categories = productsRepository.Products.Select(x => x.Category.Name);
foreach (string categoryName in categories.Distinct().OrderBy(x => x))
{
var newlink = new Navlink{
text = categoryName,
RouteValues = new RouteValueDictionary(new {
controller = "Products",
action = "List",
category = categoryName,
page = 1
}),
IsSelected = (categoryName == currentCategory)
}
navLinks.Add(newlink);
}
Есть ли преимущество в том, чтобы делать это способом Стивена по сравнению с моим?