Refactoring de l'instruction foreach imbriquée
J'ai une méthode avec un imbriquée foreach
collection (itération un ensemble d'objets, puis regarder à l'intérieur de chaque objet). J'ai vu dans un livre, un bon motif pour faire ce beaucoup plus élégant, mais ne peut se souvenir de l'exemple de code. Comment pourrais-je faire de ce plus à l'ordre?
Le code est juste un typique imbriquée foreach
déclaration, donc je n'ai pas fourni un exemple de code.
source d'informationauteur dotnetdev
Vous devez vous connecter pour publier un commentaire.
La solution la plus évidente consiste à aplatir dans les méthodes.
Vieux:
Nouveau:
D'autres réponses ici semblent être concentrés sur Linq, et je suis d'accord que si vos boucles ont pas d'effets secondaires (c'est à dire que vous êtes juste essayer d'en extraire des informations à partir de la boucle de plus bas niveau), alors vous pouvez probablement réécrire l'ensemble de la chose à l'aide d'un ou de deux Linq simple consolidés. Si les effets secondaires sont impliqués, puis il suffit de suivre l'épreuve du temps la pratique de sous-routines.
Vous allez avoir à être plus précis sur ce que tu veux dire à propos des "plus élégant", comme l'OMI, il n'y a rien de particulièrement inélégante sur un imbriquée
foreach
.Cela étant dit, l'extension LINQ méthodes .NET 3.5 et ci-dessus peuvent vous aider (plus précisément
SelectMany
).Avant:
Après:
Vous pouvez utiliser LINQ SelectMany opérateur:
http://www.hookedonlinq.com/SelectManyOperator.ashx
Il est difficile de donner une réponse en dehors de tout contexte ou de l'extrait de code. Cependant, Martin Fowler a un très bon article sur la refactorisation des boucles en LINQ pipelines qui peut être trouvé ici (apprécier c'est une vieille question, alors j'espère que les futurs lecteurs bénéficieront!).
Êtes-vous penser à quelque chose comme ça?