最有效的加入字符串的方式

ima*_*age 7 c# string performance

我需要连接很多字符串并在其中任何一个之间加上逗号.我有一个字符串列表

"123123123213"
"1232113213213"
"123213123"
Run Code Online (Sandbox Code Playgroud)

而且我想得到

"123123123213,1232113213213,123213123"
Run Code Online (Sandbox Code Playgroud)

我想知道实现这一目标的最佳方法是什么.

我可以这样做:

private List<string> stringList = new List<string> { 
    // a lot of strings in here
    "1234567890", "34343434", "4343434" }; 

string outcome = string.Join(",", stringList.ToArray());
Run Code Online (Sandbox Code Playgroud)

或者可能:

StringBuilder builder = new StringBuilder();
stringList.ForEach(val => {
    builder.Append(val);
    builder.Append(",");
});

string outcome = builder.ToString();
Run Code Online (Sandbox Code Playgroud)

哪种方式更好?你知道连接字符串的更好方法吗?

Ric*_*der 6

正如@Ekkehard所说,使用string.Join.

但是,你不需要ToArray()因为string.Join有一个重载IEnumerable<string>.

List<string> stringList = new List<string> 
    { "1234567890", "34343434", "4343434" }; 

string outcome = string.Join(",", stringList);
Run Code Online (Sandbox Code Playgroud)

编辑

正如@Kobi所说,这只适用于C#4.0.在3.5我会这样做.

var s = new StringBuilder(stringList.Count * 8);
foreach (var item in stringList)
{
   s.Append(item);
   s.Append(',');
}
s.Length -= 1;
string outcome = stringList.ToList();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是.Net 4中的新功能,3.5仍然需要一个数组. (3认同)

Bro*_*ass 5

你应该使用string.Join()因为:

a)它的可读性,可维护性和易用性.

b)它StringBuilder已在内部使用,因此它非常有效(您可以使用Reflector确认自己).

编辑:

string.Join()使用a StringBuilder表示IEnumerable<T>输入的一般情况.如果你已经拥有一个阵列,那么它会使用一些巫术魔法(包括FastAllocateString()UnSafeCharBuffer)来加快速度.


Ekk*_*ner 1

使用 Join,因为它不添加结尾的“,”。