Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[C# 2.0] Récupérer les Hashtable stockés dans des ArrayList

2 réponses
Avatar
cooladn
Bonjour à tous!
Débutant en C#, je cherche à comprendre comment récupérer des Hashtable
stockés dans des ArrayList.

J'ai écris un programme qui parse du xml, et stocke chaque attribut dans un
Hashtable (le nom de l'attribut étant la clé). Comme mon fichier xml contient
500 référence et que je dois exécuter des traitements après, je stocke le
hashtable créé dans un tableau de type ArrayList.

Lorsque j'effectue une boucle sur ce tableau, je ne peux accéder à mon
tableau Hashtable:
- arrTemplates[i]["ma_cle"] me retorune une erreur.
- Stocké arrTemplates[i] dans un élément Hashtable tableau me retourne
l'erreur suivante : Cannot implicitly convert type 'object' to
'System.Collections.Hashtable'. An explicit conversion exists (are you
missing a cast?)

Pour tant lorsque je fais Console.WriteLine(tableau.GetType()), j'obtiens
bien System.Collections.Hashtable.

Quelqu'un pourrait il m'expliquer ?
Ai je mal choisi les types à utiliser ?
Si c'ets le cas, que dois je utiliser pour avoir un tableau qu'on puisse
incrémenter, et dans lequel chaque element contient des valeurs accessible
par des key ?

Merci

2 réponses

Avatar
Remi THOMAS
cooladn a écrit :
Bonjour à tous!
Débutant en C#, je cherche à comprendre comment récupérer des Hashtable
stockés dans des ArrayList.

J'ai écris un programme qui parse du xml, et stocke chaque attribut dans un
Hashtable (le nom de l'attribut étant la clé). Comme mon fichier xml contient
500 référence et que je dois exécuter des traitements après, je stocke le
hashtable créé dans un tableau de type ArrayList.

Lorsque j'effectue une boucle sur ce tableau, je ne peux accéder à mon
tableau Hashtable:
- arrTemplates[i]["ma_cle"] me retorune une erreur.
- Stocké arrTemplates[i] dans un élément Hashtable tableau me retourne
l'erreur suivante : Cannot implicitly convert type 'object' to
'System.Collections.Hashtable'. An explicit conversion exists (are you
missing a cast?)

Pour tant lorsque je fais Console.WriteLine(tableau.GetType()), j'obtiens
bien System.Collections.Hashtable.

Quelqu'un pourrait il m'expliquer ?
Ai je mal choisi les types à utiliser ?
Si c'ets le cas, que dois je utiliser pour avoir un tableau qu'on puisse
incrémenter, et dans lequel chaque element contient des valeurs accessible
par des key ?

Merci



Bonjour,
Il faut forcer le type car un ArrayList contient des object uniquement
et est déclaré comme tel. Le compilateur ne peut deviner le type
((HashTable)arrTemplates[i])["ma_cle"] va fonctionner.

Comme tu es en C# 2.0 tu peux utiliser les generics pour faire cela
automatiquement
List<HashTable> arrTemplates = new List<HashTable>();
...
HashTable tmp = new HashTable();
...
arrTemplates.Add(tmp);
...
arrTemplates[i]["ma clé"] fonctionnera car la List est typée.

Rémi
Avatar
Remi THOMAS
cooladn a écrit :
Bonjour à tous!
Débutant en C#, je cherche à comprendre comment récupérer des Hashtable
stockés dans des ArrayList.

J'ai écris un programme qui parse du xml, et stocke chaque attribut dans un
Hashtable (le nom de l'attribut étant la clé). Comme mon fichier xml contient
500 référence et que je dois exécuter des traitements après, je stocke le
hashtable créé dans un tableau de type ArrayList.

Lorsque j'effectue une boucle sur ce tableau, je ne peux accéder à mon
tableau Hashtable:
- arrTemplates[i]["ma_cle"] me retorune une erreur.
- Stocké arrTemplates[i] dans un élément Hashtable tableau me retourne
l'erreur suivante : Cannot implicitly convert type 'object' to
'System.Collections.Hashtable'. An explicit conversion exists (are you
missing a cast?)

Pour tant lorsque je fais Console.WriteLine(tableau.GetType()), j'obtiens
bien System.Collections.Hashtable.

Quelqu'un pourrait il m'expliquer ?
Ai je mal choisi les types à utiliser ?
Si c'ets le cas, que dois je utiliser pour avoir un tableau qu'on puisse
incrémenter, et dans lequel chaque element contient des valeurs accessible
par des key ?

Merci



Bonjour,
Il faut forcer le type car un ArrayList contient des object uniquement
et est déclaré comme tel. Le compilateur ne peut deviner le type
((HashTable)arrTemplates[i])["ma_cle"] va fonctionner.

Comme tu es en C# 2.0 tu peux utiliser les generics pour faire cela
automatiquement
List<HashTable> arrTemplates = new List<HashTable>();
...
HashTable tmp = new HashTable();
...
arrTemplates.Add(tmp);
...
arrTemplates[i]["ma clé"] fonctionnera car la List est typée.

Rémi