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

时间:2015-05-07 16:32:38

标签: c# string algorithm data-structures

我轻松浏览了(function (H) { H.wrap(H.ColorAxis.prototype, 'toColor', function (proceed, value, point) { if(value == 0) return '#FF00FF'; // My color else return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); // Normal coloring }); }(Highcharts)); 类的文档,并没有看到任何用于将任意数量的字符串组合成单个字符串的好工具。我可以在我的程序中提出的最佳程序是

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

string assetUrl = combinedString(assetUrlPieces);

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

5 个答案:

答案 0 :(得分:17)

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

string assetUrl = string.Concat(assetUrlPieces);

与使用空分隔符调用string.Join相比,这更简单(并且可能更有效,但可能微不足道)。

如评论中所述,如果你实际在代码中的同一点建立数组,那么你就不需要其他任何数组,只需直接使用连接:

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

......或者可能使用string.Format代替。

答案 1 :(得分:15)

我更喜欢使用string.Join

var result = string.Join("", pieces);

您可以阅读string.Join on MSDN

答案 2 :(得分:4)

我想要StringBuilder

var sb = new StringBuilder(pieces.Count());
foreach(var s in pieces) {
    sb.Append(s);
}
return sb.ToString();

<强>更新

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

  1. 纯粹的简约
  2. 性能更高。在引擎盖下,它使用FillStringChecked,它使用指针副本,而string.Join使用StringBuilder。见http://referencesource.microsoft.com/#mscorlib/system/string.cs,1512。 (感谢@Bas)。

答案 3 :(得分:3)

string.Concat是您想要的最合适的方法。

var result = string.Concat(pieces);

除非您想在各个字符串之间添加分隔符。然后您使用string.Join

var result = string.Join(",", pieces); // comma delimited result.

答案 4 :(得分:0)

使用常规for循环执行此操作的简单方法: (因为你可以使用索引,加上我喜欢这些循环比foreach循环更好)

   private string combinedString(string[] pieces)
   {
    string alltogether = "";
    for (int index = 0; index <= pieces.Length - 1; index++) {
        if (index != pieces.Length - 1) {
             alltogether += string.Format("{0}/" pieces[index]);
        }
    }
    return alltogether;