IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Méthode récursive et yield


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut Méthode récursive et yield
    Bonjour à toutes et tous,

    Voilà j'ai un petit problème avec ma méthode récursive que j'arrive pas à faire fonctionner.

    1) Auriez-vous un cours ou tuto sur les fonctions/méthodes récursive ?
    2) A quoi sert le "yield" ?
    3) Est-ce que le type de retour est forcement un IEnumérable ?

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Bonjour,

    1) pour le tuto, le net ne doit pas en manquer
    2) pour le yield: http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

    Si tu compiles leur example, tu remarqueras en avançant pas à pas avec le debuger que lorsque tu passes sur un yield, tu quittes la fonction Power pour aller à la ligne Console.Write("{0} ", i); avant de retourner dans Power, etc...

    Contrairement à une fonction classique où dès que tu sors de la fonction tu n'y reviens plus "automatiquement".
    3) Si tu veux utiliser yield, le retour doit effectivement être de type IEnumerable

  3. #3
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Merci mais j'avoue que j'ai du mal à trouvé de tuto clair.

    En gros j'ai une méthode qui doit parcourir l'ensemble de mes fichiers sur le disk à la rechercher des fichier d'extension .ax

    Voila ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public IEnumerable<FileInfo[]> EXPLORE(string path)
            {
                DirectoryInfo _file = new DirectoryInfo(path);
                DirectoryInfo[] _list_dossier = _file.GetDirectories();
                FileInfo[] _list_ficher = _file.GetFiles("*.ax");
     
                yield return _list_ficher;
     
                for (int i = 0; i < _list_dossier.Count(); i++)
                {
                    EXPLORE(path + '\\' +  _list_dossier[i].Name);
                }
            }
    Remarques-tu un problème ?

    Car j'ai aucun retour ...

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    As-tu essayé de mettre ta méthode dans une boucle du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(FileInfo[] fileInfo in EXPLORE(@"c:\"))
    {
        ...
    }
    Sinon, je ne pense pas que tu ai besoin de passer par yield dans ce cas là.
    Un Yield n'est pas obligatoire pour faire du récursif.

    Il te suffit de récupérer tout les fileInfos puis de les renvoyer sous forme de List ou de tableau.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Non je n'est pas essayer je vais le faire mais comment codé ma fonction sans le yield ? Comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public IEnumerable<FileInfo[]> EXPLORE(string path)
            {
                DirectoryInfo _file = new DirectoryInfo(path);
                DirectoryInfo[] _list_dossier = _file.GetDirectories();
                FileInfo[] _list_ficher = _file.GetFiles("*.ax");
     
                return _list_ficher;
     
                for (int i = 0; i < _list_dossier.Count(); i++)
                {
                    EXPLORE(path + '\\' +  _list_dossier[i].Name);
                }
            }
    Mais dans ce cas il ne va pas passer dans le for

  6. #6
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    N'oublie pas les balises CODE.

    Pourquoi cherche-tu as faire un return avant la récursivité ?

    Mets tout simplement le return à la fin de ta fonction.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public List<FileInfo> EXPLORE(string path)
    {
        List<FileInfo[]> list = new List<FileInfo[]>();
     
        DirectoryInfo _file = new DirectoryInfo(path);
        DirectoryInfo[] _list_dossier = _file.GetDirectories();
        list.AddRange(_list_dossier);
        FileInfo[] _list_ficher = _file.GetFiles("*.ax");
     
        for (int i = 0; i < _list_dossier.Count(); i++)
        {
            list.AddRange(EXPLORE(path + '\\' + _list_dossier[i].Name));
        }
     
         return list;
     
    }

    A noter que je n'ai pas tester le code, les AddRange que j'ai mis peuvent ne pas fonctionner.

    En gros, tu va avoir une liste qui sera retournée par ta fonction.
    Dans cette liste on va d'abord ajouter les dossier récupérés.

    Puis pour chaque dossier, on va récupérer ses dossiers et les rajouter à la liste, et ainsi de suite.

    A la fin tu auras une liste contenant tout les dossiers et sous-dossiers contenu dans le chemin donné en paramètre.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

Discussions similaires

  1. Rendre une méthode récursive avec Yield return
    Par Ticoche dans le forum Général Dotnet
    Réponses: 16
    Dernier message: 24/04/2013, 15h00
  2. Réponses: 8
    Dernier message: 23/09/2007, 19h40
  3. [POO]Méthode récursive pour tester dépendances
    Par viviboss dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2007, 12h06
  4. [algoritmique][débutant]Méthode récursive
    Par lejimi dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2006, 19h54
  5. Vérification du parenthèsage (méthode récursive)
    Par Saiyan dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/12/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo