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

Dotnet Discussion :

Modifier un objet d'un hashtable


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut Modifier un objet d'un hashtable
    Bonjour,

    je parcours les objets d'un hashtable qui contient des objets de type structure que j'ai créée et je voudrais modifier certains champs.

    J'ai essayé (entre autres) ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ICollection listeCles = monHashtable.Keys;
     
    foreach (string cle in listeCles)
    {
        MaStruct monObjet = (MaStruct)monHashtable[cle];
        // là je modifie certains champs de monObjet
        monHashtable[cle] = monObjet;
    }
    ça marche bien pour le 1er tour de boucle,
    mais après ça lance une exception, comme quoi le parcours de la collection est impossible parce qu'elle a été modifiée...

    quelqu'un aurait-il une solution?

    merci

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Bonjour.

    C'est entièrement normal. En effet dans un foreach vous ne pouvez pas modifier les éléments de la collection. Il faut bien comprendre que derrière le foreach il y un "simple" enumérateur. Or dans la classe HashTable les clefs et les valeurs sont liées. Ainsi lors de la modification d'une valeur, la collection est marqué comme modifié également au niveau des clefs.

    Une des solutions simple ( mais qui ne doit pas être utilisé si la collection est de taille importante ) consiste à passer par une liste intermédiaires.

    Dans ce cas :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ArrayList listeCles = new ArrayList(monHashtable.Keys);
     
    foreach (string cle in listeCles)
    {
        MaStruct monObjet = (MaStruct)monHashtable[cle];
        // là je modifie certains champs de monObjet
        monHashtable[cle] = monObjet;
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Par défaut
    oui,

    j'avais pensé à faire ça
    mais je voulais savoir s'il n'y avait un autre moyen...

    ça ne devrait pas poser trop de mon souci, hashtable ne contiendra que quelques objets tout au plus

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/12/2006, 04h13
  2. [vb.net]modifier un objet dans un arrayList
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/10/2006, 14h23
  3. Réponses: 6
    Dernier message: 21/05/2006, 21h37
  4. Modifier un objet dhtml
    Par roger_owc dans le forum ASP
    Réponses: 1
    Dernier message: 26/08/2005, 13h52
  5. [HashMap] Modification d'objet d'une Hashtable
    Par viena dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2004, 10h04

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