2010-09-01 20 views
9

Es tut mir leid wegen des verwirrenden Titels, aber ich habe keinen besseren Weg gefunden, mein Problem zu erklären.C# Erhalte eine Liste aus einem Feld aus einer Liste

Ich habe eine Liste von Objekten, myList, können wir sie 'MyObject' nennen. die Objekte in etwa so aussehen:

Class MyObject 
{ 
    int MYInt{get;set;} 
    string MYString{get;set;} 
} 

List<MyObject> myList; 
... 

ich für eine schöne/short/andere Art freue mich auf ein List<string> von ‚myList‘ zu schaffen, wo ich nur das "MyString Eigentum verwenden.

Ich kann dies mit myList.forEach() tun, aber ich frage mich, ob es eine schönere Art und Weise ist

Dank !!

Antwort

13

Mit LINQ:

var list = myList.Select(o => o.MYString); 

Das ist eine IEnumerable<string> zurückgibt. Um ein List<string> fügen Sie einfach einen Anruf zu ToList():

var list = myList.Select(o => o.MYString).ToList(); 

Dann iterieren die Ergebnisse wie gewohnt:

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 
+1

Es könnte erwähnenswert, dass, wenn alles, was Sie tun wollen Iterierte darüber ist, brauchen Sie nicht 'ToList()'. Verwenden Sie das nur, wenn Sie die neue Liste oder den neuen Index darin ändern müssen. – Timwi

1

Hier Ahmad's answer integrierte Abfrage-Syntax:

var strings = from x in myList 
       select x.MYString; 

List<string> list = strings.ToList(); 

Diese könnte auch geschrieben werden:

List<string> list = (from x in myList 
        select x.MYString).ToList(); 
1

LINQ ist nicht erforderlich, wenn Ihre Eingabe- und Ausgabelisten beide List<T> sind. Sie können die ConvertAll Methode verwenden statt:

List<string> listOfStrings = myList.ConvertAll(o => o.MYString); 
+0

Nun, in meinem Fall sind die Eingabe und Ausgabe nicht die gleichen. Eingabe ist Liste und Ausgabe ist Liste . funktioniert convertAll() noch? – edan

+0

Was bedeutet "es gibt keine Notwendigkeit für LINQ"? Es ist nicht so, dass LINQ eine ganze separate Bibliothek oder irgendetwas anderes ist, weißt du. Ob Sie '.ConvertAll' oder' .Select' verwenden, macht keinen praktischen Unterschied. – Timwi

+0

@edan: Ja, 'ConvertAll' funktioniert, wie in meinem obigen Beispiel. – LukeH

Verwandte Themen