2011-04-18 4 views
0

je ne sais pas quel est le problème avec ce code .. il dit chaîne ne peut pas être converti en objet .. quelque chose comme ça ..C# problème Hashtable

//lvLogs <-- ListView (2 colums)  

Hashtable serverLogs = new Hashtable(); 

     serverLogs.Add("a", "aw"); 
     serverLogs.Add("b", "ew"); 
     serverLogs.Add("c", "iw"); 

     foreach (DictionaryEntry h in serverLogs) 
     { 
      lvLogs.Items.Add(h.Key).SubItems.Add(h.Value);     
     }  

mais ce code fonctionne très bien ..

Hashtable serverLogs = new Hashtable(); 

     serverLogs.Add("a", "aw"); 
     serverLogs.Add("b", "ew"); 
     serverLogs.Add("c", "iw"); 

     foreach (DictionaryEntry h in serverLogs) 
     { 
      //lvLogs.Items.Add(h.Key).SubItems.Add(h.Value); 
      //lvi.SubItems.Add(h.Value); 
      lvLogs.Items.Add(h.Key + " - " + h.Value); 
     }  

comment puis-je séparer la clé et la valeur des colonnes de lvLogs?

+0

utilisez Key.ToString() et Value.ToString(). Mais Dictionary est meilleur que d'autres suggèrent –

Répondre

8

Hashtable n'est pas une collection fortement typée. DictionaryEntry.Key renvoie un object et vous essayez de l'utiliser comme string sans distribution, ce qui n'est pas autorisé.

La raison fonctionne la chaîne est que concaténation ne accepte object comme argument (il appelle ToString() là-dessus). Utilisez à la place Dictionary<string, string>.

+0

Notez que l'opération 'h.Key +" - "+ h.Value' convertit implicitement les objets h.Key et h.Value en chaînes. – Artemix

+0

L'opération de concaténation de chaîne '+' est compilée aux appels de diverses surcharges de 'String.Concat', qui appellent' ToString() 'sur les arguments' object'. – thecoop

4

Premier ordre du jour, supprimez le Hashtable. Les classes de l'espace de noms System.Collections sont obsolètes et ont été remplacées par des équivalents dans l'espace de noms System.Collections.Generic. Utilisez à la place un Dictionary<string, string>.