2010-09-01 5 views
9

Je suis désolé pour le titre confus, mais je n'ai pas trouvé une meilleure façon d'expliquer mon problème.C# obtenir une liste d'un champ sur une liste

J'ai une liste d'objets, myList, appelons-les 'MyObject'. les objets ressemblent à ceci:

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

List<MyObject> myList; 
... 

Je cherche une belle façon/courte/fantaisie pour créer un List<string> de « myList », où je suis en utilisant uniquement la propriété « MaChaîne ».

je peux faire myList.forEach() à l'aide, mais je me demandais s'il y a une plus belle façon

Merci !!

Répondre

13

Avec LINQ:

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

qui retourne un IEnumerable<string>. Pour obtenir un List<string> ajouter simplement un appel à ToList():

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

ensuite itérer sur les résultats comme vous le feriez normalement:

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

Il pourrait être utile de mentionner que si tout ce que vous voulez faire est itérer dessus, vous n'avez pas besoin 'ToList()'. Utilisez-le uniquement si vous avez besoin de modifier la nouvelle liste ou l'index. – Timwi

1

Voici Ahmad's answer en utilisant la syntaxe de requête intégrée:

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

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

Cette pourrait également être écrit:

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

Vous n'avez pas besoin de LINQ si vos listes d'entrées et de sorties sont toutes les deux List<T>. Vous pouvez utiliser la méthode ConvertAll à la place:

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

bien, dans mon cas, l'entrée et la sortie ne sont pas les mêmes. l'entrée est Liste et la sortie est Liste . convertAll() fonctionne-t-il toujours? – edan

+0

Qu'est-ce que "LINQ" n'est pas censé vouloir dire? Ce n'est pas comme si LINQ était une bibliothèque séparée ou autre, vous savez. Que vous utilisiez '.ConvertAll' ou' .Select' ne fait aucune différence. – Timwi

+0

@edan: Oui, 'ConvertAll' fonctionnera, comme dans mon exemple ci-dessus. – LukeH

Questions connexes