J'ai un IList de type Breadcrumb qui est juste une classe légère qui a les propriétés NavigationTitle, NavigationUrl et IsCurrent. Il est mis en cache sur le serveur Web. J'ai une méthode qui construit le fil d'Ariane actuel jusqu'à ce que le premier Fil d'Ariane dont IsCurrent a la valeur true ... utilise le code ci-dessous. C'est très laide et certainement une solution rapide, mais j'étais curieux, cela peut-il être facilement refactorisé en LINQ?Est-ce que cela peut être refactorisé en nice sympa LINQ?
IList<Breadcrumb> crumbs = new List<Breadcrumb>();
bool foundCurrent = false;
for (int a = 0; a < cachedCrumbs.Count; a++)
{
crumbs.Add(crumbs[a]);
if (foundCurrent)
{
break;
}
foundCurrent = (crumbs[a + 1] != null && ((Breadcrumb)crumbs[a + 1]).IsCurrent);
}
Salut Jon, cela a fonctionné! Je vous remercie. Je comprends ce que fait le select, mais je suis un peu perdu sur le .TakeWhile (crumb => foundCurrent) - que fait-il exactement? Et, pourquoi voyons-nous à nouveau foundCurrent dans le select? – EvilSyn
Le TakeWhile était réellement faux - il aurait dû être "! FoundCurrent" plutôt que "foundCurrent" - je l'ai corrigé. Le TakeWhile lambda est juste "continuez alors que nous n'avons pas trouvé de courant". Le lambda select consiste essentiellement à définir foundCurrent * après * le TakeWhile. –