2009-12-30 18 views
11

"Ho una lista di oggetti con una proprietà "CustomizationName"Come unire come una stringa una proprietà di una classe?

voglio unirmi da una virgola i valori di quella proprietà, vale a dire, qualcosa di simile a questo:.

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' 

risposta

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

Se si desidera, è possibile trasformare questo in un metodo di estensione:

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()); 
    } 
} 

Usage:

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

Si dovrebbe ottenere punti bonus per l'esempio estensioni. – Snekse

+0

Ottima risposta ma non è necessaria la parte .ToArray(). –

+0

@DavidThielen Questa risposta è di '09, 5 anni fa, prima di .Net 4.0 era fuori. Nelle versioni precedenti di .Net, non si poteva passare un oggetto IEnumerable a String.join, doveva essere un array. – BFree

Problemi correlati