使用已定义的分隔符将字符串数组转换为字符串

时间:2016-03-17 07:51:56

标签: c# .net string linq

我有以下代码:

var days = new string[] { "1", "2", "3", "4" });

我需要将转换为字符串,如下所示:

string daysConverted = "'1','2','3','4'";

我尝试使用string.Join:

var daysConverted = string.Join("','", days); 

但我得到了:

"1','2','3','4"  // missing quotes at the beginning and at the end. 

我可以在两边连接引号,但我想知道是否有任何语法可以一次性完成。

4 个答案:

答案 0 :(得分:6)

您必须在结尾处开始添加它,因为Join只会合并两个字符串。在将"1""2"','的分配器合并后,如果说这是"1','2",则只需在两个元素之间添加分隔符。

截至MSDN

  

使用指定的连接字符串数组的所有元素   每个元素之间的分隔符

最后,下面的解决方案在内存和速度方面似乎是最好的,因为你有少量的字符串连接(两个用于开始和结束,一个用于每个元素 - > 2 + n)。

var daysConverted = "'" + string.Join("','", days) + "'"; 

答案 1 :(得分:6)

在加入之前,您应该将字符串包装到'

var result = String.Join(",", days.Select(s => "'" + s + "'"));

答案 2 :(得分:4)

嗯,谈到最小字符串连接,这是一个使用LINQ AggregateStringBuilder的解决方案。它不是那么简洁,但执行...... 连接。

var daysConverted = days.Aggregate(new StringBuilder(), (sb, s) => 
    (sb.Length > 0 ? sb.Append(",") : sb).Append("'").Append(s).Append("'"))
    .ToString(); 

答案 3 :(得分:2)

  

我可以在两边连接引号,但我想知道是否有任何语法可以一次性完成。

不是以优化的方式。 string.Join在内部使用StringBuilder来组成字符串。在string.Join周围作弊会使你的代码不那么清晰(例如使用棘手的LINQ语句)并且速度较慢。

最后,@ HimBromBeere建议的经典方式是最好的方式。