Autor Beitrag
alegria
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mi 15.07.09 09:39 
Also ich hab ne Klasse Country:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
// bereits für vielerlei andere Zwecke angelegt/vorhanden
List<Countries> countries = new List<Countries>();
countries.Add(new Countries("Deutschland""Berlin"));
countries.Add(new Countries("Frankreich""Paris"));
...
// hier jetzt das eigentlich interessante
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 15.07.09 09:58 
Hallo!

Da Du als Framework-Version 3.5 angegeben hast, dürfte das mit LINQ ganz einfach gehen:

ausblenden C#-Quelltext
1:
textbox.AutoCompleteCustomSource.AddRange(countries.Select(c => c.Hauptstadt).ToArray());					


Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
alegria Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mi 15.07.09 10:34 
Sehr schön! :)

Vielen Dank...