2012-08-16 11 views
17

Digamos que tengo este objeto:En C#, ¿hay una manera "fácil" de realizar una cadena. ¿Entrar en la lista de tipos complejos?

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

Un miembro puede tener varias funciones: member.Roles = List<Role>();

Si quería unirse a los roles de los miembros en una lista separada por comas de los nombres de roles, ¿hay una forma fácil way (similar a string.Join(",", member.Roles); - que no funciona porque un rol es un tipo complejo)?

+0

Tal vez usando algo como 'member.Roles.Select (x = > x.Name) .ToList () '? –

Respuesta

44
using System.Linq 

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

Eso es lo que quise decir =) +1 –

+4

'using System.Linq' –

+1

rock on, gracias por la respuesta realmente rápida (y Coronel Panic por la declaración de uso!) – Chaddeus

5

Sí, puede utilizar la sobrecarga de String.Join (nuevo en .NET 4) que tiene un IEnumerable<String> y un poco de LINQ:

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

Otra opción es reemplazar el método ToString() de la clase Role para devolver lo que quieres y luego solo publica esta declaración.

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

Si sólo desea la propiedad Name, a continuación, otras respuestas son buenas

Pero si usted tiene más propiedades, ajuste su ToString() para que coincida con:

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

etc y luego llamarlo como

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

Usted no necesita llamar

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

como sería llamado internamente por objeto dentro String.Join(), por lo que si se reemplaza ToString(), que acaba de llamar

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

Awesome, thanks for the tip! – Chaddeus

+1

Simplemente elegante. +1 –

+0

@ DanielMarín: Gracias :) –

Cuestiones relacionadas