Почему они использовали этот синтаксис C # для создания списка ссылок в ASP.NET MVC 2?

Мне трудно понять следующий код 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);
}

Есть ли преимущество в том, чтобы сделать это способом Стивена по сравнению с моим?

5
задан quakkels 3 September 2010 в 18:06
поделиться