2009-08-25 10 views
12
class Person 
{ 
public string FirstName { get; set; } 
public string LastName { get; set; } 
} 

List<Person> theList = populate it with a list of Person objects 

¿Cómo puedo obtener una cadena que contiene toda la FirstName de los objetos de la lista separados por una coma. Por ejemplo: John, Peter, JackCómo unirse a una lista genérica de objetos sobre la propiedad específica

Una solución básica sería iterar a través de cada objeto, pero estoy seguro de que hay una solución de una sola línea.

Gracias.

Respuesta

18

actualización (a partir de .NET 4) string.Join ahora tiene una sobrecarga que toma un IEnumerable<string> - yay!

string.Join(",", theList.Select(p => p.FirstName)); 

Para versiones .NET debajo de 4,0 (mayores):

string.Join(",", theList.ConvertAll(person => person.FirstName).ToArray()); 

lo descomponen en sus partes componentes:

List<T>.ConvertAll convierte una List<T> a otro tipo - en este caso a List<string>.

ToArray() convierte List<string> en string[].

string.Join() escribe una matriz de cadenas (el segundo parámetro) como una sola cadena, separadas por el primer parámetro.

+2

¿Cómo funciona la solución "Actualización (a partir de .NET 4)", únase solo a FirstNames? – mts1701

+0

La solución .NET 4 necesita una selección: 'String.Join (", ", theList.Select (p => p.FirstName));' – goodeye

6

También podría utilizar un método de extensión consulta

string output = theList.Select(p => p.FirstName).Aggregate((progress, next) => progress + ", " + next); 

Esto evitará tener que crear una matriz.

Cuestiones relacionadas