2009-12-30 19 views
11

"Tengo una lista de objetos con una propiedad 'CustomizationName'¿Cómo unirse como una cadena una propiedad de una clase?

Quiero unirme por una coma los valores de dicha propiedad, es decir, algo como esto:.

List<MyClass> myclasslist = new List<MyClass>(); 
myclasslist.Add(new MyClass { CustomizationName = "foo"; }); 
myclasslist.Add(new MyClass { CustomizationName = "bar"; }); 
string foo = myclasslist.Join(",", x => x.CustomizationName); 
Console.WriteLine(foo); // outputs 'foo,bar' 

Respuesta

24
string foo = String.Join(",", myClasslist.Select(m => m.CustomizationName).ToArray()); 

Si lo desea, puede convertir esto en un método de extensión:

public static class Extensions 
{ 
    public static string ToDelimitedString<T>(this IEnumerable<T> source, Func<T, string> func) 
    { 
     return ToDelimitedString(source,",",func); 
    } 

    public static string ToDelimitedString<T>(this IEnumerable<T> source, string delimiter, Func<T, string> func) 
    { 
     return String.Join(delimiter, source.Select(func).ToArray()); 
    } 
} 

Uso:

public class MyClass 
{ 
    public string StringProp { get; set; } 
} 

.....

 var list = new List<MyClass>(); 
     list.Add(new MyClass { StringProp = "Foo" }); 
     list.Add(new MyClass { StringProp = "Bar" }); 
     list.Add(new MyClass { StringProp = "Baz" }); 

     string joined = list.ToDelimitedString(m => m.StringProp); 
     Console.WriteLine(joined); 
+0

Debe obtener puntos de bonificación para el ejemplo de extensiones. – Snekse

+0

Excelente respuesta pero no necesita la parte .ToArray(). –

+0

@DavidThielen Esta respuesta es del '09, hace 5 años, antes. Net 4.0 había salido. En versiones anteriores de .Net, no se podía pasar un IEnumerable a String.join, tenía que ser una matriz. – BFree

Cuestiones relacionadas