C# 拼接List中各對象里的字符串 增加ConvertAll和Select的區別


有不少都用到了拼接字符串, 

我之前用循環拼字符串,有時候寫起來很麻煩。現在查到這樣一種寫法,大家可以保留備用:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM