Автоматически генерировать строку формата заполнителя для String.Format () - PullRequest
0 голосов
/ 14 сентября 2009

Есть ли способ сообщить функции String.Format() (без написания моей собственной функции), сколько заполнителей существует динамически? Было бы здорово сказать 15 и знать, что я бы сгенерировал {0}-{14} для меня. Я генерирую текстовые файлы, и у меня часто есть более 25 столбцов. Это очень помогло бы.

OK

Я перефразирую свой вопрос. Я хотел знать, возможно ли вообще сообщить функции String.Format во время выполнения, сколько заполнителей мне нужно в моей строке формата, не печатая их все вручную.

До сих пор я догадываюсь по ответам, я просто напишу свой собственный метод.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 10 мая 2012

Вы можете использовать Enumerable.Range и LINQ для генерации строки сообщения.

Enumerable.Range(0, 7).Select(i => "{" + i + "}").ToArray()

генерирует следующую строку:

"{0}{1}{2}{3}{4}{5}{6}"
1 голос
/ 14 сентября 2009

Зачем использовать string.Format, когда нет форматирования (по крайней мере, из того, что я вижу в вашем вопросе)? Вместо этого вы можете использовать простую конкатенацию с использованием stringbuilder.

1 голос
/ 14 сентября 2009

Добавляя немного к ответу Альберта Эйна, я не верю, что String.Format может сделать это для вас из коробки. Вам необходимо динамически создать строку формата перед использованием метода String.Format, например:

var builder = new StringBuilder();

for(var i = 0; i < n; ++i)
{
  builder.AppendFormat("{0}", "{" + i + "}");
}

String.Format(builder.ToString(), ...);

Хотя это не совсем читабельно.

0 голосов
/ 14 сентября 2009

Есть способ сделать это напрямую:

Просто создайте пользовательский IFormatProvider, а затем используйте эту перегрузку string.Format .

Например, если вы хотите всегда иметь 12 десятичных знаков, вы можете сделать:

CultureInfo culture = Thread.CurrentThread.CurrentCulture.Clone(); // Copy your current culture
NumberFormatInfo nfi = culture.NumberFormat;
nfi.NumberDecimalDigits = 12; // Set to 12 decimal points

string newResult = string.Format(culture, "{0}", myDouble); // Will put it in with 12 decimal points
...