我的C#应用程序中有StringBuilder
的实例,其中我希望根据上下文使用不同数量的空格填充某些行。我的用法非常简单:
StringBuilder MyStringBuilder = new StringBuilder();
MyStringBuilder.AppendFormat("{0:" + this._padding + "}"); // <-- Exception thrown here
MyStringBuilder.AppendLine("My data.");
如果this._padding==10
,结果输出应如下所示:
My data.
如何在不使用for循环的情况下填充字符串?感谢。
附加信息
异常:“索引(从零开始)必须大于或等于零且小于参数列表的大小。”
答案 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的任意数字。
答案 7 :(得分:-1)
这样做的一种蹩脚方式,但应该有效
for(int i=0; i <this._padding; i++)
{
MyStringBuilder.AppendFormat("{0}"," ");
}
_padding需要是一个int