2009-12-30 5 views
11

«J'ai une liste d'objets avec une propriété « CustomizationName »Comment joindre en tant que chaîne une propriété d'une classe?

Je veux rejoindre par une virgule les valeurs de cette propriété, par exemple, quelque chose comme ceci:.

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' 

Répondre

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

Si vous voulez, vous pouvez transformer cela en une méthode d'extension:

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

Utilisation:

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

Vous devriez obtenir des points bonus pour l'exemple des extensions. – Snekse

+0

Grande réponse mais vous n'avez pas besoin de la partie .ToArray(). –

+0

@DavidThielen Cette réponse est de '09, il y a 5 ans, avant .Net 4.0 était sorti. Dans les anciennes versions de .Net, vous ne pouviez pas passer un IEnumerable à String.join, il devait s'agir d'un tableau. – BFree

Questions connexes