2009-08-25 16 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 

Jak uzyskać ciąg znaków, który zawiera wszystkie FirstName obiektów na liście oddzielonych przecinkami. Np .: John, Peter, JackJak dołączyć do ogólnej listy obiektów określonej właściwości

Podstawowym rozwiązaniem byłaby iteracja przez każdy obiekt, ale jestem pewien, że istnieje rozwiązanie jednoliniowe.

Dzięki.

Odpowiedz

18

Update (jak .NET 4) string.Join ma teraz przeciążenie który bierze IEnumerable<string> - yay!

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

NET wersjach poniżej 4,0 (starszego):

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

złamanie go na części składowe:

List<T>.ConvertAll konwertuje List<T> do innego rodzaju - w tym przypadku a List<string>.

ToArray() konwertuje List<string> na string[].

zapisuje tablicę ciągów znaków (drugi parametr) jako pojedynczy ciąg, oddzielony pierwszym parametrem.

+2

W jaki sposób rozwiązanie "Aktualizacja (od wersji .NET 4)" łączy się tylko z FirstNames? – mts1701

+0

Rozwiązanie .NET 4 wymaga wyboru: 'String.Join (", ", theList.Select (p => p.FirstName));' – goodeye

6

Można również stosować metodę rozszerzenia zapytania

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

Pozwoli to uniknąć konieczności tworzenia tablicy.

Powiązane problemy