gratifiant > microsoft.* > microsoft.dotnet.csharp

cooladn (26/06/2006, 11h49)
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
Remi THOMAS (26/06/2006, 14h06)
cooladn a écrit :
[..]
> 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
Discussions similaires