2012-08-16 6 views
17

Lassen Sie uns sagen, ich habe dieses Objekt:In C# gibt es eine "einfache" Möglichkeit, string.Join auf komplexen Typ Liste durchzuführen?

public class Role { 
    public string Name { get; set; } 
    public string Slug { get; set; } 
    public DateTime DateAssigned { get; set; } 
    ... 
} 

Ein Mitglied mehrere Rollen haben: member.Roles = List<Role>();

Wenn ich das Mitglieds Rollen in eine durch Kommata getrennte Liste der Rollennamen beitreten wollten, ist es eine einfache Weg (ähnlich string.Join(",", member.Roles); - was funktioniert nicht, weil eine Rolle ein komplexer Typ ist)?

+0

Vielleicht wie etwas mit 'member.Roles.Select (x = > x.Name) .ToList () '? –

Antwort

44
using System.Linq 

string.Join(",", member.Roles.Select(r => r.Name)) 
+0

Das ist, was ich meinte =) +1 –

+4

'using System.Linq' –

+1

Rock auf, danke für die wirklich schnelle Antwort (und Oberst Panic für die Verwendung Aussage!) – Chaddeus

5

Ja, können Sie die Überlastung von String.Join (neu in .NET 4), die eine nimmt können IEnumerable<String> und ein wenig Linq: Ein

String joined = string.Join(",", member.Roles.Select(r => r.Name)); 
2

andere Option ist die ToString() Methode außer Kraft setzen der Role Klasse zurückgeben, was Sie wollen, und dann nur diese Aussage.

var joined = string.Join(",", member.Roles) 
8

Wenn Sie nur die Eigenschaft Name wollen, dann werden andere Antworten sind gut

Aber wenn Sie mehr Eigenschaften haben, passen Sie ToString() zum Spiel:

public override String ToString() 
{ 
    return String.Format("Name: {0}. Slug : {1}", Name, Slug); 
} 

usw. und nennen es dann als

String.Join(", ", member.Roles); 

müssten Sie nicht

anrufen
String.Join(", ", member.Roles.Select(x => x.ToString()) 

, wie es intern innerhalb String.Join() von Objekt aufgerufen werden würde, wenn Sie also ToString() außer Kraft setzen, rufen Sie einfach

String.Join(", ", member.Roles); 
+0

Super, danke für den Tipp! – Chaddeus

+1

Einfach elegant. +1 –

+0

@ DanielMarín: Danke :) –

Verwandte Themen