我有以下代码:
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.
我可以在两边连接引号,但我想知道是否有任何语法可以一次性完成。
答案 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 Aggregate和StringBuilder的解决方案。它不是那么简洁,但执行...... 零连接。
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建议的经典方式是最好的方式。