在C#中适当的方式将任意数量的字符串组合成一个字符串

Fir*_*com 5 c# string algorithm data-structures

我轻松浏览了string该类的文档,并没有看到任何将任意数量的字符串组合成单个字符串的好工具.我可以在我的程序中提出的最佳程序是

string [] assetUrlPieces = { Server.MapPath("~/assets/"), 
                             "organizationName/",
                             "categoryName/",
                             (Guid.NewGuid().ToString() + "/"),
                             (Path.GetFileNameWithoutExtension(file.FileName) + "/")
                           };

string assetUrl = combinedString(assetUrlPieces);
Run Code Online (Sandbox Code Playgroud)
private string combinedString ( string [] pieces )
{
    string alltogether = "";
    foreach (string thispiece in pieces) alltogether += alltogether + thispiece;
    return alltogether; 
}
Run Code Online (Sandbox Code Playgroud)

但这似乎是太多的代码和太多的低效率(来自字符串添加)和尴尬.

Jon*_*eet 17

如果你想在值之间插入一个分隔符,那么string.Join你的朋友.如果您只想连接字符串,那么您可以使用string.Concat:

string assetUrl = string.Concat(assetUrlPieces);
Run Code Online (Sandbox Code Playgroud)

与使用空分隔符调用相比,更简单(并且可能更有效,但可能无关紧要)string.Join.

如注释中所述,如果您实际在代码中的同一点构建数组,并且您不需要该数组用于其他任何内容,则只需直接使用连接:

string assetUrl = Server.MapPath("~/assets/") +
    "organizationName/" + 
    "categoryName/" +
    Guid.NewGuid() + "/" +
    Path.GetFileNameWithoutExtension(file.FileName) + "/";
Run Code Online (Sandbox Code Playgroud)

......或者可能使用string.Format.


dot*_*tom 15

我更喜欢使用string.Join:

var result = string.Join("", pieces);
Run Code Online (Sandbox Code Playgroud)

您可以在MSDN上阅读string.Join


DWr*_*ght 4

我想你想要一个StringBuilder

var sb = new StringBuilder(pieces.Count());
foreach(var s in pieces) {
    sb.Append(s);
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)

更新

@FiredFromAmazon.com:我认为您会想要采用string.Concat其他人提供的解决方案

  1. 其纯粹的简单性
  2. 更高的性能。在底层,它使用FillStringChecked,它执行指针复制,而string.Join使用StringBuilder. 请参阅http://referencesource.microsoft.com/#mscorlib/system/string.cs,1512。(谢谢@Bas)。