如何使用Linq聚合单引号

本文关键字:单引号 Linq 何使用 | 更新日期: 2023-09-27 18:14:06

假设我有一个字符串集合,如下所示:

IList<string> myList = new List<string>(){"one", "two", "three"};

使用myList.Aggregate,我想以"'one', 'two', 'three'"(包括单引号)结束

是否有人有这样做的一个圆滑的方式,只使用聚合函数?我在想

这几行
myList.Aggregate((increment, seed) => string.Concat(increment, ", ", seed));

如何使用Linq聚合单引号

为什么使用Aggregate而不是更简单的string.Join呢?

string joined = string.Join(", ", myCollection.Select(x => "'" + x + "'"));

(如果你使用。net 3.5,添加ToArray调用)

可以使用Aggregate实现string.Join(理想情况下使用StringBuilder),但这不是非常令人愉快。假设一个非空集合,I 认为 this应该可以做到:

string csv = myCollection.Aggregate(new StringBuilder("'"),
                 (sb, x) => sb.AppendFormat("{0}', '"),
                 sb => { sb.Length -= 3;
                         return sb.ToString(); });

既然您指定"只使用聚合函数",那么:

myCollection.Aggregate(string.Empty, (soFar, next) => 
                       soFar + (soFar == string.Empty ? soFar : ", ") 
                       + "'" + next + "'")

(或)

myCollection.Aggregate(string.Empty, (soFar, next) =>
                                  string.Format("{0}{1}'{2}'", 
                                  soFar, soFar == string.Empty ? soFar : ", ", next))

以这种方式使用Aggregate进行字符串连接是确实是低效的。

EDIT:已更新以删除前导,