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 :

Modifier un élément d'un foreach dans la même boucle [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut Modifier un élément d'un foreach dans la même boucle
    Bonjour à tous

    1 - J'ai récupéré une liste de dossiers dans un tableau
    2 - Puis je ne veux conserver que le nom des dossiers, sans le chemin
    3 - Ensuite, je veux remplacer l'ancienne valeur (avec le chemin) par la nouvelle (sans le chemin)

    Pour cela, j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                Byte boff
                String folder
                String[] versionZips = Directory.GetDirectories(stringPath)
    
    
                foreach (string versionZip in VersionZips)
                {
                    // Split the directory
                    boff = Convert.ToByte(versionZip.LastIndexOf('\\'));
                    folder = versionZip.Substring(boff + 1);
                    versionZip = folder;
    
                }
    L'erreur est : "Readonly local variable canot be used as an assigment target"

    Je pense que l'objet versionzip dans la boucle foreach est d'office en readonly
    Est-ce vrai ?

    En plus, je pense que je peux faire cela bien mieux via une expression lambda ...
    Pourriez-vous me mettre sur la voir svp ?
    Quelles sont les solutions ?
    Comment feriez-vous cela ?

    je suis en C#, VS 2010, pour un service WCF... what else ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Passe par une boucle for, tu n'auras pas ce problème.

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    merci de ta réponse
    en fait je viens de faire cela :

    Code : 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
                Byte boff
                String folder
                String[] versionZips = Directory.GetDirectories(stringPath)
    
                List<string> newVersionZips = new List<string>();
    
                foreach (string versionZip in VersionZips)
                {
                    // Split the directory
                    boff = Convert.ToByte(versionZip.LastIndexOf('\\'));
                    folder = versionZip.Substring(boff + 1);
                    
                    newVersionZips.Add(folder); 
    
                }
    Je préfère passer par une liste, vu ses avantages.
    Je peux ensuite rebasculer vers un tableau si j'en ai besoin me semble t-il

    Mais il me semble que je peux transformer ce foreach en expression lambda à présent

    Une idée ?

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,
    tu as raison de préférer les listes, les tableaux n'ont que très peu d'intérêt.

    Citation Envoyé par Hepil Voir le message
    Mais il me semble que je peux transformer ce foreach en expression lambda à présent

    Une idée ?
    Of course, c'est la base de Linq
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var result = VersionZips.Select(dir =>
                {
                    // Split the directory
                    boff = Convert.ToByte(dir.LastIndexOf('\\'));
                    return dir.Substring(boff + 1);
                }).ToList();
    Sinon, plutôt que tripatouiller des chaines, tu peux utiliser cette methode, qui te renvoie des DirectoryInfo, dont la propriete Name contient ce que tu veux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var names = new DirectoryInfo(path).GetDirectories().Select(info => info.Name).ToList();

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    Je savais qu'il y avait encore des gens doués sur terre ...
    Mais où sont-ils?

    Merci à toi ôhh Guulh

    Plus sérieusement, je vais étudier de suite ton code et je t'en remercie
    Je reviens ici après bien sûr ...

  6. #6
    Membre éclairé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Par défaut
    PS : Pour avoir le Select du tableau, il faut ajouter la référence :
    Mais j'ai un souci :

    Citation Envoyé par Guulh Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var result = VersionZips.Select(dir =>
                {
                    // Split the directory
                    boff = Convert.ToByte(versionZip.LastIndexOf('\\'));
                    return versionZip.Substring(boff + 1);
                }).ToList();
    ...
    dans ce cas de figure, on ne trouve plus versionZip ... il est en erreur, vu qu'il faisiat partie de la boucle foreach ...

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Change par dir , ou sinon modifie dir par versionZip.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Deux variables dans une même boucle
    Par swiMa dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/05/2014, 15h57
  2. [Débutant] Résultat d'un foreach dans un même tableau
    Par traz0m dans le forum C#
    Réponses: 3
    Dernier message: 11/01/2013, 18h57
  3. itération sur deux tableaux dans la même boucle
    Par romson2 dans le forum Struts 2
    Réponses: 0
    Dernier message: 06/06/2012, 09h06
  4. [Débutant] Plusieurs opérations dans la même boucle
    Par Zakkounet dans le forum VB.NET
    Réponses: 6
    Dernier message: 01/02/2012, 17h05
  5. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59

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