Форматирование нескольких объектов в одну строку
До сих пор речь шла о том, как конкретный тип форматирует свои объекты. Однако
иногда требуется сформировать строку из множества отформатированных объектов.
В следующем примере в строку включаются дата, имя человека и его возраст:
String s = String.Format("On {0}, {1} is {2} years old.",
new DateTime(2012, 4, 22, 14, 35, 5), "Aidan", 9);
Console.WriteLine(s);
385
Получение.строкового.представления.объекта
Если собрать и запустить этот код в потоке с региональным стандартом
en-US
,
на выходе получится строка:
On 4/22/2012 2:35:05 PM, Aidan is 9 years old.
Статический метод
Format
типа
String
получает строку форматирования,
в которой подставляемые параметры обозначены своими номерами в фигурных
скобках. В этом примере строка форматирования указывает методу
Format
под-
ставить вместо
{0}
первый после строки форматирования параметр (текущие
дату и время), вместо
{1}
— следующий параметр (
Aidan
) и вместо
{2}
— третий,
последний параметр (
9
).
Внутри метода
Format
для каждого объекта вызывается метод
ToString
, полу-
чающий его строковое представление. Все возвращенные строки затем объединя-
ются, а полученный результат возвращается методом. Все было бы замечательно,
однако нужно иметь в виду, что ко всем объектам применяется общий формат
и региональные стандарты вызывающего потока.
Чтобы расширить стандартное форматирование объекта, нужно добавить внутрь
фигурных скобок строку форматирования. В частности, следующий код отлича-
ется от предыдущего только наличием строк форматирования для подставляемых
параметров 0 и 2:
String s = String.Format("On {0:D}, {1} is {2:E} years old.",
new DateTime(2012, 4, 22, 14, 35, 5), "Aidan", 9);
Console.WriteLine(s);
Если собрать и запустить этот код в потоке с региональным стандартом
en-US
,
на выходе вы увидите строку:
On Sunday, April 22, 2012, Aidan is 9.000000E+000 years old.
Разбирая строку форматирования, метод
Format
«видит», что для подставля-
емого параметра 0 нужно вызывать описанный в его интерфейсе
IFormattable
метод
ToString
, которому передаются в качестве параметров
D
и
null
. Аналогич-
но,
Format
вызывает метод
ToString
для интерфейса
IFormattable
параметра 2,
передавая ему
E
и
null
. Если у типа нет реализации интерфейса
IFormattable
, то
Format
вызывает его метод
ToString
без параметров, а в результирующую строку
добавляется формат по умолчанию.
У класса
String
есть несколько перегруженных версий статического метода
Format
. В одну из них передается объект, реализующий интерфейс
IFormatProvider
,
в этом случае при форматировании всех подставляемых параметров можно при-
менять региональные стандарты, задаваемые вызывающей программой. Очевидно,
Format
вызывает метод
ToString
для каждого объекта, передавая ему полученный
объект
IFormatProvider
.
Если вместо
String
для формирования строки применяется
StringBuilder
,
можно вызывать метод
AppendFormat
класса
StringBuilder
. Этот метод ра-
ботает так же, как
Format
класса
String
, за исключением того, что результат
форматирования добавляется к массиву символов
StringBuilder
. Точно так же
386
Do'stlaringiz bilan baham: |