2017-05-01 4 views
0

Ich habe eine Hashtable, die eine Struktur enthält und versuche, eine foreach-Schleife zu verwenden, um auf Elemente innerhalb jeder Struktur zuzugreifen. Die Ausgabe gibt mir jedoch nur den Wert Titel, anstatt mich auf die Daten innerhalb zu bekommen. Wenn ich versuche, CityDetail.City zu verwenden, gibt es nur das neueste in CityDetail gespeicherte Element, anstatt die Hashtable zu überprüfen. Jeder Rat, wie man damit umgeht, wäre dankbar, danke.Zugriffsstruktur innerhalb einer Hashtabelle 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

Gibt es Gründe, du bist immer noch 'Hashtable' anstatt' Wörterbuch <,> 'verwenden? Die nicht generischen Sammlungen sind nicht wirklich veraltet, aber es ist fast * immer * besser, die generischen Sammlungen zu verwenden. –

+1

Ich würde auch Ihre Designentscheidung um die Struktur in Frage stellen - warum ist es eine Struktur und keine Klasse? Warum verwenden Sie öffentliche Felder? –

+2

Was _expecting_ es zu drucken? Wenn Sie ein Objekt an "Console.WriteLine" übergeben, ruft es die ToString-Methode für dieses Objekt auf. Da Ihre 'CityData'-Struktur' ToString' nicht überschreibt, wird standardmäßig die Implementierung in der 'object'-Klasse verwendet, die nur den Typnamen ausgibt. Überschreiben Sie entweder die Methode zum Drucken der Informationen oder den Objektverweis auf ein 'CityData'-Objekt und drucken Sie die Felder selbst aus. – Abion47

Antwort

1

Damit Ihre Schleife etwas anderes zu drucken, was zu Druck definieren bräuchten:

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

Danke, das hat perfekt funktioniert! – CBC

Verwandte Themen