StringBuilder.AppendFormat引发异常

时间:2011-11-14 22:07:11

标签: c# .net-3.5 padding stringbuilder

我的C#应用​​程序中有StringBuilder的实例,其中我希望根据上下文使用不同数量的空格填充某些行。我的用法非常简单:

StringBuilder MyStringBuilder = new StringBuilder();
MyStringBuilder.AppendFormat("{0:" + this._padding + "}"); // <-- Exception thrown here
MyStringBuilder.AppendLine("My data.");

如果this._padding==10,结果输出应如下所示:

     My data.

如何在不使用for循环的情况下填充字符串?感谢。

附加信息

异常:“索引(从零开始)必须大于或等于零且小于参数列表的大小。”

8 个答案:

答案 0 :(得分:4)

  • 您需要在一次通话中同时提供格式和参数。
  • 要向左填充,请使用{0,10},而不是{0:10}

试试这个:

MyStringBuilder.AppendFormat("{0," + this._padding + "}", "My Data");

您还可以使用string.PadLeft方法。

MyStringBuilder.Append("My Data".PadLeft(this._padding));

答案 1 :(得分:4)

您从未传递{0}的参数来引用。

答案 2 :(得分:3)

AppendFormat()期望数据格式化为附加参数:

MyStringBuilder.AppendFormat("{0:" + this._padding + "}", "My data.");

答案 3 :(得分:2)

这似乎是一种奇怪的做法:

sb.Append(' ', this._padding).AppendLine("My Data");

答案 4 :(得分:1)

尝试

//  AppendFormat("{0:" + this._padding + "}");
    AppendFormat("{0:" + this._padding + "}", "");

占位符正在为某事保留一个位置。

  

异常:“索引(从零开始)必须大于或等于零且小于参数列表的大小。”

0大于或等于零但在这种情况下它不是 less 而不是参数列表的大小(0)。

答案 5 :(得分:1)

你不能简单地写一些像MyStringBuilder.AppendFormat("{0}");这样的东西你必须让变量按格式字符串格式化,比如MyStringBuilder.AppendFormat("{0}", "My data");

答案 6 :(得分:0)

您可以使用IEnumerable.Repeat生成相同字符串/ char的任意数字。

http://msdn.microsoft.com/en-us/library/bb348899.aspx

答案 7 :(得分:-1)

这样做的一种蹩脚方式,但应该有效

for(int i=0; i <this._padding; i++)
{
   MyStringBuilder.AppendFormat("{0}"," ");
}

_padding需要是一个int