Мне трудно понять следующий код 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 => новый NavLink и т.д ...
. Я думаю, что все это Он создает экземпляр 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));
Я могу сказать, что она составляет список NavLink. Я не понимаю, почему Стивен Сандерсон написал это так. Разве он не мог написать что-то вроде:
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);
}
Есть ли преимущество в том, чтобы сделать это способом Стивена по сравнению с моим?