StringBuilder.AppendFormat создает исключение - PullRequest
1 голос
/ 15 ноября 2011

У меня есть экземпляр StringBuilder в моем приложении C #, в котором я хотел бы, чтобы некоторые строки были дополнены различным количеством пробелов в зависимости от контекста. Мое использование очень просто:

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

Если this._padding==10, результирующий вывод должен выглядеть примерно так:

     My data.

Как я могу дополнить мои строки, не прибегая к использованию цикла for? Спасибо.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Исключение: «Индекс (на основе нуля) должен быть больше или равен нулю и меньше размера списка аргументов."

Ответы [ 8 ]

4 голосов
/ 15 ноября 2011

Вы никогда не передавали параметр для {0} для ссылки.

4 голосов
/ 15 ноября 2011
  • Необходимо указать формат и аргументы в одном вызове.
  • Для заполнения слева вы используете {0,10}, а не {0:10}.

Попробуйтеthis:

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

Существует также метод string.PadLeft, который вы можете использовать.

MyStringBuilder.Append("My Data".PadLeft(this._padding));
3 голосов
/ 15 ноября 2011

AppendFormat() ожидает, что данные будут форматироваться как дополнительный аргумент:

MyStringBuilder.AppendFormat("{0:" + this._padding + "}", "My data.");
2 голосов
/ 15 ноября 2011

Это кажется странным способом:

sb.Append(' ', this._padding).AppendLine("My Data");
1 голос
/ 15 ноября 2011

Вы не можете просто написать что-то вроде MyStringBuilder.AppendFormat("{0}"); Вы должны указать переменную для форматирования в строке формата, например MyStringBuilder.AppendFormat("{0}", "My data");

1 голос
/ 15 ноября 2011

Попробуйте

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

Заполнитель содержит место для что-то .

Исключение: "Индекс (на основе нуля) должен быть большебольше или равно нулю и меньше размера списка аргументов. "

0 больше или равно нулю, но в данном случае оно не было меньше чем размер списка аргументов (также 0).

0 голосов
/ 15 ноября 2011

Хромой способ сделать это, но должен работать

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

_padding должен быть int

0 голосов
/ 15 ноября 2011

Вы можете использовать IEnumerable.Repeat для генерации произвольных чисел из одной и той же строки / символа.

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

...