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 :

InvalidOperationException pendant foreach


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut InvalidOperationException pendant foreach
    Bonjour,

    J'ai ce petit morceau de 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
    15
    16
    17
     
     
       checkboxes = new Dictionary<String, bool>();
       checkboxes.Add("Monday", false);
       checkboxes.Add("Tuesday", false);
       checkboxes.Add("Wednesday", false);
       checkboxes.Add("Thursday", false);
       checkboxes.Add("Friday", false);
     
        foreach (String key in checkboxes.Keys)
        {
                XmlNode node = XmlDoc.SelectSingleNode("//opti/closingdays/closingday[@day='" + key + "']");
     
                checkboxes[key] = Boolean.Parse(node.InnerText);
     
     
         }
    Le code me génère une exception InvalidOperationException à la deuxième itération. Lorsque je supprime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkboxes[key] = Boolean.Parse(node.InnerText);
    Plus aucun problème.

    Des idées ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    dans la deuxieme itération tu as quoi dans InnerText?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    Je joins le xml si ça peut aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <opti>
    <closingdays>
    <closingday day="Monday"><![CDATA[True]]></closingday>
    <closingday day="Tuesday"><![CDATA[True]]></closingday>
    <closingday day="Wednesday"><![CDATA[False]]></closingday>
    <closingday day="Thursday"><![CDATA[False]]></closingday>
    <closingday day="Friday"><![CDATA[False]]></closingday></closingdays>
    </opti>


    Je me suis peut être mal exprimé : l'exception est levé après la première itération. Le debuggeur surligne le "in" de la boucle. Ca arrive généralement lorsque l'on ajoute/supprime un élément dans la collection que l'on parcoure.... mais ce n'est pas le cas ici !

    A la première itération, le valeur InnerText est bien "True".

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach (String key in new List<String>(checkboxes.Keys))

  5. #5
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut
    C'est ce qui arrive quand la collection est modifiée.
    On ne peut pas modifier une collection pendant un foreach.
    Faut que tu fasse ca autrement, genre avec un
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dictionary<String, bool> checkboxes = new Dictionary<String, bool>();
    Dictionary<String, bool>.Enumerator en = checkboxes.GetEnumerator();
    while (en.MoveNext())
    {
        XmlNode node = XmlDoc.SelectSingleNode("//opti/closingdays/closingday[@day='" + en.Current.Key + "']");
        en.Current.Value = Boolean.Parse(node.InnerText);
    }

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    Ok, je pensais que ça ne concernait que l'ajout/suppression.
    Merci

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

Discussions similaires

  1. InvalidOperationException Boucle foreach
    Par nonolerobot77 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/06/2007, 18h43
  2. InvalidOperationException Boucle foreach
    Par nonolerobot77 dans le forum C#
    Réponses: 1
    Dernier message: 01/06/2007, 18h18
  3. Conserver l'affichage pendant les calculs ?
    Par ceugniet dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/03/2004, 12h19
  4. Published property d'un compo conservées pendant l'exécution
    Par bobby-b dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/09/2003, 10h15
  5. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13

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