2017-05-01 1 views
0

J'ai une table hachage contenant une structure et j'essaie d'utiliser une boucle foreach pour accéder aux éléments de chaque structure. Cependant, la sortie ne me donnera que le titre de la valeur plutôt que de me permettre d'obtenir les données à l'intérieur. Lorsque j'essaie d'utiliser CityDetail.City, il ne donne que l'élément le plus récent stocké dans CityDetail plutôt que de vérifier la table de hachage. Tout conseil sur la façon de gérer cela serait grandement apprécié, merci.Structure d'accès dans une table de hachage C#

 Hashtable CityDataHT = new Hashtable(); 
    CityData CityDetail = new CityData(); 
    for(int i = 0; i <10; i++) 
    { 
     //code for getting the various elements for city detail 
     CityDetail.City = SplitCity[0]; 
     CityDetail.Region = SplitCity[1]; 
     CityDetail.Country = SplitCity[2]; 
     CityDetail.Latitude = Latitude; 
     CityDetail.Longitude = Longitude;   
     CityDataHT.Add(Convert.ToString(i), CityDetail); 
     } 

     foreach (int k in CityDataHT.Keys) 
     { 
     Console.WriteLine(CityDataHT[k]); 
     // this line just gives the value title - IP_Project+CityData 
     } 

    public struct CityData 
    { 
     public string City, Region, Country, Latitude, Longitude, Distance; 

     public CityData(string p1, string p2, string p3, double p4, double p5, Int32 p6) 
     { 
      City = p1; 
      Region = p2; 
      Country = p3; 
      Latitude = Convert.ToString(0); 
      Longitude = Convert.ToString(1); 
      Distance = Convert.ToString(2); 

     } 
    } 
+1

Quel est le motif que vous utilisez toujours 'Hashtable' plutôt que' 'Dictionnaire <,>? Les collections non génériques ne sont pas réellement obsolètes, mais il est presque * toujours * préférable d'utiliser les collections génériques. –

+1

Je voudrais également remettre en question votre décision de conception autour de la structure - pourquoi est-ce une structure plutôt que d'une classe? Pourquoi utilisez-vous les champs publics? –

+2

Qu'est-ce que vous attendez pour imprimer? Lorsque vous passez un objet à 'Console.WriteLine', il appelle la méthode' ToString' sur cet objet. Puisque votre structure 'CityData' ne remplace pas' ToString', elle est par défaut implémentée dans la classe 'object' qui imprime simplement le nom du type. Remplacez la méthode pour imprimer les informations ou transtyper la référence d'objet dans un objet 'CityData' et imprimez les champs eux-mêmes. – Abion47

Répondre

1

Pour que votre boucle pour imprimer quelque chose d'autre que vous auriez besoin de définir ce à imprimer:

foreach (int k in CityDataHT.Keys) 
    { 
    CityData city = (CityData)CityDataHT[k]; 
    Console.WriteLine(
     city.City + " - " +city.Country 
    ); 
    // Prints "City - Country" 
    } 
+0

Merci, cela a fonctionné parfaitement! – CBC