【问题标题】:construction string with string builder et string format具有字符串生成器和字符串格式的构造字符串
【发布时间】:2018-02-28 08:26:04
【问题描述】:

在我有一个可以直接写入我的代码的修复项目之前:

 public static string GetCsvStringFormat(int count)
        {
            var sb = new StringBuilder();
            for (int i = 0; i < count; i++)
            {
                sb.AppendFormat("{{{0}}};", i);
            }

            return sb.ToString();
        }

    return string.Format(
        RefTypeParseExtension.GetCsvStringFormat(3),
        "No Id","Article","Amount"
    );

但现在该项目是动态的,可能只有 1 个或 2 个或更多项目。

我尝试过使用数组:

string[] Tete = { "No Id","Article","Amount","IsFix"}
string temp = "";
for (int i = 0; i < Tete.Length; i++)
{
    if (i != Tete.Length-1) { temp += "\"" + Tete[i] + "\","; }
    else { temp += "\"" + Tete[i] + "\""; }
}
return string.Format(
    RefTypeParseExtension.GetCsvStringFormat(Tete.Length),
    temp
);

我也尝试过使用字符串生成器:

public static string GetTete(string[] Tete)
{
    var sb = new StringBuilder();          

    for (int i = 0; i < Tete.Length; i++)
    {
        if (i != Tete.Length - 1) { sb.AppendFormat("\"{0}\",", Tete[i]); }
        else { sb.AppendFormat("\"{0}\"", Tete[i]); }
    }

    return sb.ToString();
}

我都收到同样的错误:

索引(零基数)必须大于或等于零且小于参数列表的大小。

即使数组和字符串生成器返回的结果完全一样。

【问题讨论】:

  • 不是来自这个代码。
  • 另外,更好的线路是string.Join(", ", Tete);

标签: c# string string-formatting


【解决方案1】:

我可能在这里遗漏了一些东西,但是您的第一个代码示例正在处理 String.Format 的重载,它接受 stringparams object[] args - 所以我认为您应该简单地这样做:

public static string GetTete(string[] Tete)
{
    return string.Format(RefTypeParseExtension.GetCsvStringFormat(Tete.Length), Tete);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2014-01-04
    • 2021-03-30
    相关资源
    最近更新 更多