В операторе 4 из листинга 6.8 неявно применяется метод Format, который заменяет все вхождения параметров в фигурных скобках значениями соответствующих переменных из списка вывода. После номера параметра можно задать минимальную ширину поля вывода, а также указать спецификатор формата, который определяет форму представления выводимого значения.
В общем виде параметр задается следующим образом:
{n [, m[:спецификатор_формата]]}
Здесь n — номер параметра. Параметры нумеруются с нуля, нулевой параметр заменяется значением первой переменной из списка вывода, первый параметр — второй переменной и т. д. Параметр m определяет минимальную ширину поля, которое отводится под выводимое значение. Если выводимому числу достаточно меньшего количества позиций, неиспользуемые позиции заполняются пробелами. Если числу требуется больше позиций, параметр игнорируется. Спецификатор формата, как явствует из его названия, определяет формат вывода значения. Например, спецификатор С (Currency) означает, что параметр должен форматироваться как валюта с учетом национальных особенностей представления, а спецификатор X (Hexadecimal) задает шестнадцатеричную форму представления выводимого значения.
ПРИМЕЧАНИЕ
До настоящего момента мы пользовались сокращенной записью, задавая только номера параметров. Список спецификаторов формата приведен в приложении.
В операторе 5 используются так называемые пользовательские шаблоны форматирования. Если приглядеться, в них нет ничего сложного: после двоеточия задается вид выводимого значения посимвольно, причем на месте каждого символа может стоять либо #, либо 0. Если указан знак #, на этом месте будет выведена цифра числа, если она не равна нулю. Если указан 0, будет выведена любая цифра, в том числе и 0. В табл. 6.4 приведены примеры шаблонов и результатов вывода.
Таблица 6.4. Примеры применения пользовательских шаблонов форматирования
double a = 12.234;
int b = 29;
MessageBox.Show(string.Format((" a = {0,6:C} b = {1,2:X}", a, b)); // 4
MessageBox.Show(string.Format((" a = {0,6:0.##} b = {1,5:0.# ' руб. '}", a, b));
Будет выдано:
а = 12,23р. b = 1D
а = 12,23 b = 29.0 ' руб. '
double a = 12.234;
MessageBox.Show(string.Format("{0, 6:00.00}", a));
Число Шаблон Вид
1,243 00.00 01,24
1,243 #.## 1,24
0,1 00.00 00,10
0,1 #.##,1
Пользовательский шаблон может также содержать текст, который в общем случае заключается в апострофы.