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
我想你想要一个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其他人提供的解决方案
FillStringChecked,它执行指针复制,而string.Join使用StringBuilder. 请参阅http://referencesource.microsoft.com/#mscorlib/system/string.cs,1512。(谢谢@Bas)。