Ho difficoltà a comprendere il seguente codice C#. Questo codice è stato preso da Pro ASP.NET MVC 2 Framework di Steven Sanderson. Il codice crea in modo essenziale URL in base a un elenco di categorie.Perché hanno usato questa sintassi C# per creare un elenco di collegamenti in ASP.NET MVC 2?
Ecco il codice:
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)
Un sacco di roba sta succedendo qui. Sto indovinando che sta definendo una funzione che si aspetta due parametri di tipo stringa e NavLink. Poi vedo la Lambda categoryName => new NavLink etc...
. Penso che tutto ciò che sta facendo sia creare un'istanza di NavLink
.
La funzione viene quindi chiamato nella stessa azione Controller:
// 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));
posso dire che si tratta di fare un elenco di NavLink. Non capisco perché Steven Sanderson abbia scritto così in questo modo. Non avrebbe potuto scrivere qualcosa del tipo:
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);
}
Esiste un vantaggio nel fare la strada di Steven contro la mia strada?
Non ho pensato di dover ripetere il codice per il collegamento home. – quakkels