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

原文地址:https://www.cnblogs.com/movingcity/p/2957803.html