如何使用带单引号的Linq聚合

Sti*_*rez 1 c# linq aggregate

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

IList<string> myList = new List<string>(){"one", "two", "three"};
Run Code Online (Sandbox Code Playgroud)

使用myList.Aggregate我希望最终得到"'one','two','three'"(包括单引号)

有人只有使用聚合函数才能做到这一点吗?我正在思考一些问题

myList.Aggregate((increment, seed) => string.Concat(increment, ", ", seed));
Run Code Online (Sandbox Code Playgroud)

但这只是解决方案的一半.

Jon*_*eet 7

有什么理由使用Aggregate而不是更简单string.Join

string joined = string.Join(", ", myCollection.Select(x => "'" + x + "'"));
Run Code Online (Sandbox Code Playgroud)

(ToArray如果您使用的是.NET 3.5,请添加一个电话.)

可以实现string.Join使用Aggregate(理想情况下使用a StringBuilder),但它并不是非常令人愉快.假设非空集合,我认为应该这样做:

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