2010-06-27 5 views
0

J'ai une table de hachage qui stocke les adresses IP en tant que chaînes pour la clé et un objet de ma création dans la valeur correspondante. Je continue à obtenir une exception à foreach (DictionaryEntry info in MasterHash.Keys). Plus précisément, il se produit lorsque le débogueur obtient DictionaryEntry. J'ai essayé de provoquer un message de mon instruction try catch mais le compilateur n'aime pas que j'essaie de lancer e à .ToString ou .Message.Ne pas comprendre l'exception, ne peut pas convertir en texte lisible

private void UpdateMap(Hashtable masterHash) 
{ 
    try 
    { 
     foreach (DictionaryEntry info in masterHash.Keys) 
     { 
      AxShockwaveFlashObjects.AxShockwaveFlash axFlash = wfh.Child as AxShockwaveFlashObjects.AxShockwaveFlash; 
      IPInstance foo = (IPInstance)info.Value; 

      axFlash.CallFunction(foo.GetMarkerCall().ToString(SaveOptions.DisableFormatting)); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.ToString()); 
    } 
} 

Répondre

1

Il s'agit peut-être d'une exception de transtypage non valide. masterHash.Keys n'est pas un DictionaryEntry. Les clés doivent être des chaînes (votre chaîne IP).

EDIT:

ICollection MyKeys = MyTable.Keys; 

foreach (object Key in MyKeys) 
{ 
    Console.WriteLine(Key.ToString()); 
} 
+0

J'ai essayé d'implémenter le foreach avec une chaîne au lieu de l'entrée Dictionary. L'EDI se plaint maintenant: Erreur \t 1 'chaîne' ne contient pas de définition pour 'Valeur' ​​et aucune méthode d'extension 'Valeur' ​​acceptant un premier argument de type 'chaîne' n'a été trouvée (manque une directive using ou un assembly référence?) Comment puis-je récupérer mes objets lors de l'utilisation de la chaîne dans foreach? – Paul

+0

En regardant de plus près, les clés d'un hashtable sont énumérées comme ICollection. Je vais modifier une suggestion. –

+0

Si vous utilisez .net 3.0 ou supérieur, vous pouvez utiliser 'var' au lieu d'objet dans votre instruction' foreach'. – juharr

0

Je ne sais pas pourquoi vous ne parvenez pas à obtenir les valeurs de l'exception pris. Cependant, vous avez dit que vous

IP stocke sous forme de chaînes pour la clé

mais vous sont en boucle par les touches mais attendez-vous DictionaryEntry.

Essayez Doing:

foreach(String s in masterHash.Keys)

ou quelque chose comme ça à la place.

+0

J'ai essayé d'implémenter le foreach avec une chaîne à la place de l'entrée Dictionary. L'EDI se plaint maintenant: Erreur 'chaîne' ne contient pas de définition pour 'Valeur' ​​et aucune méthode d'extension 'Valeur' ​​acceptant un premier argument de type 'chaîne' n'a été trouvée (manque-t-il une directive using ou un référence d'assemblage?) – Paul

+0

Comment puis-je récupérer mes objets lors de l'utilisation de la chaîne dans foreach? – Paul

Questions connexes