Entwickler-Ecke
Basistechnologien - Zugriff auf einer Spalte bei einer Klasse oder List<> Konv.?
alegria - Mi 15.07.09 09:39
Titel: Zugriff auf einer Spalte bei einer Klasse oder List<> Konv.?
Also ich hab ne Klasse Country:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public class Country { public string Land { get; set; } public string Hauptstadt { get; set; } public Countries(string Land, string Hauptstadt) { this.Land = Land; this.Hauptstadt = Hauptstadt; } } |
und will nun alle Hauptstädte zu einer Textbox als AutoCompleteCustomSource hinzufügen. Ich helfe mir indem ich ein List<string> erstelle und alle Hauptstädte einlese um dann entsprechend zuzuordnen. Also so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| List<Countries> countries = new List<Countries>(); countries.Add(new Countries("Deutschland", "Berlin")); countries.Add(new Countries("Frankreich", "Paris")); ... List<String> test = new List<String>(); foreach (Countries xxx in countries){ test.Add(xxx.Hauptstadt); } textbox.AutoCompleteCustomSource.AddRange(test.ToArray()); |
Aber kann ich das nicht irgendwie direkter machen? Die List countries ist ja schon da. Ich müsste jetzt nur irgendwie die konkrete Spalte benennen und vielleicht das dann noch automatisch mit ToList() in ne Liste umwandeln und könnte es so letzlich wie mit meiner test Liste dann mittels ToArray() der textbox zuordnen...
Geht sowas? Ideen? Hinweise?
Danke im Voraus...
JüTho - Mi 15.07.09 09:57
Nein, ich glaube nicht, dass es etwas Einfacheres oder Schnelleres gibt. Das Problem ist, dass du eine List<T> hast und für jedes Element (Item) den Wert einer bestimmten Eigenschaft abfragen willst. Eine solche Möglichkeit, eine Spalte zu extrahieren, gibt es meines Wissens in keiner Collection.
Du könntest lediglich eine solche Methode allgemein definieren (vielleicht als Extension-Methode), der du eine beliebige List<T> mit dem Namen und Typ U einer Eigenschaft übergibst und eine List<U> zurückbekommst. Aber das lohnt sich nur, wenn man das häufiger benötigt.
In deinem Fall kannst du den Umweg über List<string> sparen und direkt in ein String-Array kopieren, weil du durch countries die Anzahl der Strings bereits kennst:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| string[] test = new string[countries.Count]; for(int x1 = 0; x1 < countries.Count, x1++) { test[x1] = countries[x1].Hauptstadt; } textbox.AutoCompleteCustomSource.AddRange(test); |
Gruß Jürgen
Christian S. - Mi 15.07.09 09:58
Hallo!
Da Du als Framework-Version 3.5 angegeben hast, dürfte das mit LINQ ganz einfach gehen:
C#-Quelltext
1:
| textbox.AutoCompleteCustomSource.AddRange(countries.Select(c => c.Hauptstadt).ToArray()); |
Grüße
Christian
alegria - Mi 15.07.09 10:34
Sehr schön! :)
Vielen Dank...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!