有不少都用到了拼接字符串,
我之前用循環拼字符串,有時候寫起來很麻煩。現在查到這樣一種寫法,大家可以保留備用:
QueryUsers = String.Join(",", query.Users.ConvertAll(u => u.Code).ToArray())
String.Join(string separator, params string[] value);
第一個參數是連接符,而且只連接,不會在頭尾加出多余的字符。
第二個參數是一個string類型的數組。
這里又先調用List的ConvertAll方法
List<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> converter);
將query對象里的Users(是一個List<User>)全部轉換為字符串。
這里又用到一個Lambda表達式:u => u.Code,意為取得所有對象的Code。
最后ToArray()成為字符串數組。
續:既然這里的Code是string類型,那根本不用ConvertAll,直接用Select即可。感謝xujif提醒。
當需要拼接的對象不是直接的string時,才適用Convert。比如
<span style="text-decoration: line-through;">QueryUsers = String.Join(",", query.Users.ConvertAll(u => u.ToString()).ToArray())</span>
再續:不求甚解的我還是正經的查了一下ConvertAll和Select的區別。
從來源說,Select是LINQ擴展方法之一,可以用於IEnumerable<>對象,從.Net 3.5開始引入;ConvertAll只在List<>中實現,從.Net 2.0開始。
此外,他們做的處理有些許不同,在不同的情況下有區別。
ConvertAll方法從原有List直接生成一個新的List;Select方法使用延遲執行,只在要用到時才處理項目。
也就是說如果你不需要全部的項目時,Select方法是更有效率的;另一方面,一但ConvertAll返回了List,你就可以不再保留原有的List了。
本文中數據類型為List,取出全部項目后立即拼接為字符串,這個情況下用ConvertAll是沒有錯的。
參考:http://stackoverflow.com/questions/1571819/difference-between-select-and-convertall-in-c-sharp