2009-12-30 42 views
11

「我有一個屬性的對象的列表‘CustomizationName’如何作爲字符串加入類的屬性?

我想用逗號加入該財產,即價值觀,這樣的事情:

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' 

回答

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

如果你想,你可以把它變成一個擴展方法:

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

用法:

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

你應該得到的擴展例如獎勵積分。 – Snekse 2014-04-30 18:39:01

+0

很好的答案,但你不需要.ToArray()部分。 – 2014-10-26 13:42:39

+0

@DavidThielen這個答案是從'09,5年前,.Net 4.0出來之前。在舊版本的.Net中,你無法將IEnumerable傳遞給String.join,它必須是一個數組。 – BFree 2014-10-26 18:26:05

相關問題