2010-09-01 18 views
9

Lamento el confuso título, pero no encontré una forma mejor de explicar mi problema.C# obtener una lista de un campo de una lista

Tengo una lista de objetos, myList, vamos a llamarlos 'MyObject'. los objetos se ven algo como esto:

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

List<MyObject> myList; 
... 

Busco una manera agradable/corto/fantasía para crear un List<string> de 'miLista', donde estoy usando sólo la propiedad 'MiCadena'.

que pueda hacer esto utilizando myList.forEach(), pero me preguntaba si hay una manera más agradable

Gracias !!

Respuesta

13

Con LINQ:

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

que devuelve un IEnumerable<string>. Para obtener una List<string> simplemente añadir una llamada a ToList():

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

A continuación, iterar sobre los resultados como lo haría normalmente:

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

Podría valer la pena mencionar que si todo lo que quiere hacer es iterar sobre ella, no es necesario 'ToList()'. Úselo solo si necesita modificar la nueva lista o índice en él. – Timwi

1

Aquí es Ahmad's answer usando la sintaxis de consulta integrado:

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

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

Este también podría escribirse:

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

No hay necesidad de LINQ si sus listas de entrada y salida son ambas List<T>. Usted puede utilizar el método ConvertAll lugar:

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

bueno, en mi caso, la entrada y la salida no son lo mismo. la entrada es List y la salida es List . ¿convertiráAll() todavía funciona? – edan

+0

¿Qué se supone que significa "no hay necesidad de LINQ"? No es que LINQ sea una biblioteca separada o algo así, ¿sabes? Ya sea que use '.ConvertAll' o' .Select' no hace ninguna diferencia práctica. – Timwi

+0

@edan: Sí, 'ConvertAll' funcionará, como en mi ejemplo anterior. – LukeH

Cuestiones relacionadas