Le réseau pour les développeurs > Forums - Accueil > Visual C# Language > Recursive functions, directory traversal.
Poser une questionPoser une question
 

TraitéeRecursive functions, directory traversal.

  • mercredi 4 novembre 2009 16:02RobinsonUK Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
    Hi,

    Is there a way to recursively iterate a collection, gathering up items into another collection?  As a simple example, consider a inline function that is given a directory and that gathers up all of the files in that directory and all subdirectories, into a single collection.  It's pretty easy to make a recursive function to do this, but I was wondering if it could be done with linq style functors, or similar syntactic goodness.

    Thanks.

Réponses

  • mercredi 4 novembre 2009 16:21David M MortonMVP, ModérateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     Traitée

    You could write a simple extension method to perform recursive tasks:

    public static class ObjectExtensions
    {
        public static IEnumerable<T> Recurse<T>(this T value, Func<T, IEnumerable<T>> recursed)
        {
            yield return value;

            foreach (T rItem in recursed(value))
            {
                foreach (var innerItem in rItem.Recurse(recursed))
                    yield return innerItem;

            }
        }
    }

    Try this usage of the above method:

    foreach (var item in @"C:\program files\".Recurse(d => Directory.GetDirectories(d)))
        Console.WriteLine(item);


    Coding Light - Illuminated Ideas and Algorithms in Software
    Coding Light WikiLinkedInForumsBrowser
    • Proposé comme réponseRobert Varga mercredi 4 novembre 2009 16:23
    • Marqué comme réponseRobinsonUK mercredi 4 novembre 2009 16:26
    •  

Toutes les réponses