Formatting Types
The .NET Framework provides a consistent, flexible, and comprehensive means for you to represent any of the numeric, enumeration, and date and time base data types as a string. Formatting is controlled by strings of format specifier characters that indicate how a base type value is to be represented. For example, format specifiers indicate whether a formatted number should be represented in scientific notation, or whether a formatted date should present the month as a number or a name.
The .NET Framework also uses cultural settings to represent a base type in a form appropriate to a particular culture. You can supply custom cultural settings, or use the default cultural setting associated with the current thread. For example, when formatting a currency type, the cultural setting specifies the characters to use for the currency symbol, group separator, and decimal separator.
The .NET Framework allows you to define custom formatting schemes and custom cultural settings. This ability enables you to expand the formatting schemes of existing base types to accommodate custom scenarios, or create custom formatting schemes for custom types.
Formatting Overview
The .NET Framework provides a customizable, general-purpose formatting mechanism to convert a value into a string suitable for display. For example, a numeric value can be formatted in hexadecimal, scientific notation, or a series of digits separated into groups with a user-specified punctuation mark. Dates and times can be formatted as appropriate for a particular country, region, or culture. An enumerated constant can be formatted as its numeric value or its name.
You control formatting by specifying a format string and format provider, or by using the defaults. A format string contains one or more format specifier characters that indicate how a value is to be converted. A format provider supplies additional control, replacement, and cultural information required to convert a specific type.
You can override the way the .NET Framework interprets a format string by implementing the IFormattable interface, provide your own format provider by implementing the IFormatProvider interface, and perform your own formatting by implementing the ICustomFormatter interface.
The .NET Framework provides a feature called composite formatting that uses one or more format strings to embed one or more formatted values in a result string. The result string can be used for further processing, displayed to the system console, or written to a stream.
Типы форматирования
Гибкие и удобные средства .NET Framework позволяют представлять числовые значения, перечисления, время и дату в виде строк. Форматирование задается строкой спецификатора формата, определяющего представление значения базового типа. Например, спецификаторы формата могут задавать научное представление числа или указывать, должен ли месяц быть представлен в формате даты числом или именем.
Региональные параметры также могут влиять на представление базовых типов. Можно задать пользовательские региональные параметры или использовать параметры по умолчанию, связанные с текущим потоком. Например, при форматировании переменной типа денежных единиц разделитель групп и разделители дробной и целой частей определяются региональными параметрами.
Платформа .NET Framework позволяет определять пользовательские схемы форматирования и региональные параметры. Таким образом можно расширить схемы форматирования существующих базовых типов для использования в пользовательских сценариях или создать пользовательские схемы форматирования для пользовательских типов.
Общие сведения о форматировании
Платформа .NET Framework предоставляет универсальный, настраиваемый механизм преобразования какого-либо значения в строку, подходящую для отображения. Например, числовое значение может быть представлено в шестнадцатеричном виде, научном представлении или в виде последовательности цифр, разделенных на группы знаком препинания, поставленным пользователем. Время и даты могут отображаться в форматах, соответствующих стандартам определенной страны, региона или культуры. Перечисляемая константа может быть представлена в виде ее числового значения или названия.
Форматированием можно управлять, задав строку формата и выбрав поставщика формата, или используя настройки по умолчанию. Строка формата содержит один или несколько описателей формата, определяющих, каким образом осуществляется преобразование значения. Дополнительные параметры форматирования и сведения о языке и региональных параметрах, необходимых для форматирования, передаются поставщиком формата.
Можно изменить способ, которым платформа .NET Framework преобразовывает строку формата, реализуя интерфейс IFormattable, определить собственного поставщика формата, реализуя интерфейс IFormatProvider, выполнить собственное форматирование, реализуя интерфейс ICustomFormatter.
Платформа .NET Framework обеспечивает функцию, называемую составным форматированием, которая позволяет совместить в конечной строке несколько отформатированных значений из одной или нескольких строк формата. Данные конечной строки можно использовать для дальнейшей обработки данных, отображаемых в системной консоли или выводить в поток.
Format Specifiers
The .NET Framework defines standard and custom format specifiers for formatting numbers, dates and times, and enumerations. Format specifiers are used by various methods that format output strings, such as Console..::.WriteLine and the individual overloads of the ToString method of certain types, and by some methods that parse input strings, such as Parse and DateTime..::.ParseExact.
Parsing and Format Specifiers
Formatting converts the value of a type into a string representation; parsing, the inverse of formatting, creates a data type from a string representation. A format provider governs how parsing is performed, and some methods, such as DateTime..::.ParseExact, take a format specifier parameter that indicates the expected format of the string representation.
ToString and Format Specifiers
The .NET Framework supports overloading a type's default ToString method, which performs rudimentary formatting, with a specialized version of ToString that uses a format specifier parameter to indicate how the value is to be formatted
Описатели формата
Для форматирования чисел, дат, времени и перечислений в платформе .NET Framework определены стандартные и настраиваемые описатели формата. Описатели формата используются в различных средствах, форматирующих выходные строки, таких как Console..::.WriteLine, в некоторых перегруженных версиях метода ToString ряда типов и некоторыми средствами, выполняющими анализ входной строки, например Parse и DateTime..::.ParseExact.
Анализ и описатели формата
С помощью форматирования различные типы данных преобразуются в строки; с помощью анализа, обратной операции, строки преобразуются в различные типы данных. Параметры анализа задаются поставщиком формата и некоторыми средствами, например DateTime..::.ParseExact, использует параметр описателя формата, который указывает ожидаемый формат представления строки.
Метод ToString и описатели формата
Платформа .NET Framework поддерживает перегрузку метода ToString, существующего у любого типа и выполняющего элементарное форматирование, а также специализированную версию метода ToString, использующую параметр описателя формата для указания, как нужно форматировать значение.
Format Providers
Format providers supply information such as the character to use as the decimal point when formatting numeric strings, or the separation character to use when formatting a DateTime object. Format providers define the characters used for formatting by the format specifiers, but do not define the specifiers themselves.
A format provider can either be passed to the overload of ToString required by the IFormattable interface, or be predetermined by the method you are using to format text if no format provider is passed.
When no format provider is passed, the information is either inferred, or obtained from one of the standard format providers included in the .NET Framework. Generally, classes that implement IFormattable also provide overloads of ToString that accept only a format specifier or only a format provider. The default ToString method, which accepts no parameters, is inherited from the Object class.
Composite Formatting
The .NET Framework composite formatting feature, which is supported by methods such as String..::.Format and the output methods of System..::.Console and System.IO..::.TextWriter, replaces each indexed format item embedded in a source string with the formatted equivalent of a corresponding element in a list of values.
Поставщики формата15
Поставщики формата предоставляют такие данные как знак, используемый в качестве десятичной запятой при форматировании числовых строк, или знак разделения, используемый при форматировании объекта DateTime. Поставщики формата определяют знаки, применяемые при форматировании, но не сами описатели формата.
Поставщик формата также может быть передан либо перегрузке метода ToString необходимого интерфейсу IFormattable, либо, если поставщик формата не передается, то он может быть предварительно определен с помощью метода, который используется для форматирования текста.
Если поставщик формата не был передан, то для получения требуемых сведений используются стандартные поставщики формата, включенные в состав платформы .NET Framework. Классы, в которых реализован интерфейс IFormattable, предоставляют переопределенный метод ToString, передавать которому можно либо описатель формата, либо поставщик формата. Метод по умолчанию ToString, который не принимает параметры, наследуется от класса Object.
Составное форматирование
Функция составного форматирования .NET Framework, которая поддерживается такими методами, как String..::.Format, методами вывода System..::.Console и System.IO..::.TextWriter, заменяет каждый встроенный в исходную строку индексированный элемент форматирования отформатированным эквивалентом соответствующего элемента в списке значений.
Formatting Base Types
Use formatting to convert a standard .NET Framework data type to a string that represents that type in some meaningful way. For example, if you have an integer value of 100 that you want to represent as a currency value, you can use the ToString method and the currency format string ("C") to produce a string of "$100.00". Note that computers that do not have U.S. English specified as the current culture will display whatever currency notation is used by the current culture.
To format a base type, pass the desired format specifier, the desired format provider, or both to the ToString method of the object you want to format. If you do not specify a format specifier, or if you pass null, then "G" (the general format) is used as the default. If you do not specify a format provider, if you pass null, or if the provider you specify does not have the property pertaining to the requested action, the format provider associated with the current thread is used.
In the following example, the ToString method displays the value 100 as a currency-formatted string to the console.
int MyInt = 100;
String MyString = MyInt.ToString("C");
Console.WriteLine(MyString);
|
Форматирование базовых типов
Форматирование служит для преобразования стандартных типов данных .NET Framework в строку и последующего отображения. Например, чтобы отобразить целое значение 100 в виде денежных единиц, воспользуйтесь методом ToString и строкой формата денежных единиц ("С"), чтобы создать строку "$100.00". Обратите внимание, что на компьютерах с выбранным языком и региональными параметрами, отличным от "Английского (США)", эта строка будет отображена в условных единицах установленного языком и региональными параметрами.
Чтобы отформатировать базовый тип, при вызове метода ToString для требуемого вида следует задать спецификатор формата и/или поставщика формата. Если спецификатор формата не задан или в качестве параметра передано значение null, то по умолчанию будет использован указатель "G" (общий формат). Если поставщик формата не задан, или в качестве параметра передано значение null, или если для поставщика не заданы требуемые для выполнения форматирования свойства, то будет использован поставщик формата, связанный с текущим потоком.
В следующем примере метод ToString показывает значение 100 как строку денежного формата на консоли.
int MyInt = 100;
String MyString = MyInt.ToString("C");
Console.WriteLine(MyString);
|
Formatting for Different Cultures
For most methods, the values returned using one of the string format specifiers have the ability to dynamically change based on the current culture or a specified culture. For example, an overload of the ToString method accepts a format provider that implements the IFormatProvider interface. Classes that implement this interface can specify characters to use for decimal and thousand separators and the spelling and placement of currency symbols. If you do not use an override that takes this parameter, the ToString method will use characters specified by the current culture.
The following example uses the CultureInfo class to specify the culture that the ToString method and format string will use. This code creates a new instance of the CultureInfo class called MyCulture and initializes it to the French culture using the string fr-FR. This object is passed to the ToString method with the C string format specifier to produce a French monetary value.
int MyInt = 100;
CultureInfo MyCulture = new CultureInfo("fr-FR");
String MyString = MyInt.ToString("C", MyCulture);
Console.WriteLine(MyString);
|
The preceding code displays 100,00 when displayed in a Windows Forms form. Note that the console environment does not support all Unicode characters and displays 100,00 ? instead.
Форматирование для различных языков и региональных параметров16
В большинстве методов значения, возвращаемые с помощью одного из спецификаторов формата, могут динамически изменяться в зависимости от текущих и заданных региональных параметров. Например, перегруженный метод ToString принимает поставщика формата, реализующего интерфейс IFormatProvider. С помощью классов, реализующих этот интерфейс, можно задавать знак-разделитель целой и дробной частей числа, знак-разделитель тысяч, знак валюты и его расположение. Если переопределенный метод не получает этих параметров, при вызове метода ToString будут использованы знаки, определенные в текущих региональных параметрах.
В следующем примере используется класс CultureInfo для указания региональных параметров, которые будут использоваться методом ToString и строками форматирования. Этот код создает новый экземпляр класса CultureInfo с именем MyCulture и инициализирует его с использованием региональных параметров для Франции и строки fr-FR. Чтобы получить строку в денежном формате Франции, объект передается методу ToString со спецификатором формата строки C.
int MyInt = 100;
CultureInfo MyCulture = new CultureInfo("fr-FR");
String MyString = MyInt.ToString("C", MyCulture);
Console.WriteLine(MyString);
|
Предыдущий код выводит строку 100,00 на форму Windows Forms. Обратите внимание, что среда консоли не поддерживает все символы Юникод. В консоли будет отображена строка 100,00 ?.
The following example illustrates how to modify the CultureInfo object associated with the current thread. This sample assumes that U.S. English (en-US) is the culture associated with the current thread and shows how to change that culture through code. This sample also demonstrates how to specify a particular culture by passing a modified CultureInfo to a ToString method and how to pass a new DateTimeFormatInfo to a ToString method.
DateTime dt = DateTime.Now;
DateTimeFormatInfo dfi = new DateTimeFormatInfo();
CultureInfo ci = new CultureInfo("de-DE");
// Create a new custom time pattern for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd";
// Use the DateTimeFormat from the culture associated with
// the current thread.
Console.WriteLine( dt.ToString("d") );
Console.WriteLine( dt.ToString("m") );
// Use the DateTimeFormat object from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) );
// Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) );
// Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-BE");
Console.WriteLine( dt.ToString("d") );
|
В следующем примере объясняется изменение объекта CultureInfo, связанного с текущим потоком. Демонстрируется программное изменение региональных параметров. Считается, что по умолчанию с текущим потоком связаны региональные параметры "Английский (США)". Этот пример также демонстрирует способ установки региональных параметров посредством передачи измененного объекта CultureInfo методу ToString, а также способ передачи нового объекта DateTimeFormatInfo методу ToString.
DateTime dt = DateTime.Now;
DateTimeFormatInfo dfi = new DateTimeFormatInfo();
CultureInfo ci = new CultureInfo("de-DE");
// Create a new custom time pattern for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd";
// Use the DateTimeFormat from the culture associated with
// the current thread.
Console.WriteLine( dt.ToString("d") );
Console.WriteLine( dt.ToString("m") );
// Use the DateTimeFormat object from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) );
// Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) );
// Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-BE");
Console.WriteLine( dt.ToString("d") );
|
Composite Formatting
The .NET Framework composite formatting feature takes a list of objects and a composite format string as input. A composite format string consists of fixed text intermixed with indexed placeholders, called format items, that correspond to the objects in the list. The formatting operation yields a result string that consists of the original fixed text intermixed with the string representation of the objects in the list.
The composite formatting feature is supported by methods such as Format, AppendFormat, and some overloads of WriteLine and TextWriter..::.WriteLine. The String..::.Format method yields a formatted result string, the AppendFormat method appends a formatted result string to a StringBuilder object, the Console..::.WriteLine methods display the formatted result string to the console, and the TextWriter..::.WriteLine method writes the formatted result string to a stream or file.
Composite Format String
A composite format string and object list are used as arguments of methods that support the composite formatting feature. A composite format string consists of zero or more runs of fixed text intermixed with one or more format items. The fixed text is any string that you choose, and each format item corresponds to an object or boxed structure in the list. The composite formatting feature returns a new result string where each format item is replaced by the string representation of the corresponding object in the list.
Consider the following Format code fragment.
string myName = "Fred";
String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now);
|
The fixed text is "Name = " and ", hours = ". The format items are "{0}", whose index is 0, which corresponds to the object myName, and "{1:hh}", whose index is 1, which corresponds to the object DateTime.Now.
Составное форматирование
В качестве входных данных для составного форматирования в .NET Framework используется список объектов и строка составного формата. Строка составного формата состоит из фиксированного текста, в который включены индексированные местозаполнители, которые называются элементами форматирования и соответствуют объектам из списка. Операция форматирования создает результирующую строку, состоящую из исходного фиксированного текста, в который включено строковое представление объектов из списка.
Составное форматирование поддерживается такими методами, как Format и AppendFormat, а также некоторыми перегрузками методов WriteLine и TextWriter..::.WriteLine. Метод String..::.Format возвращает отформатированную результирующую строку, метод AppendFormat добавляет отформатированную результирующую строку к объекту StringBuilder, метод Console..::.WriteLine выводит отформатированную результирующую строку на консоль, а метод TextWriter..::.WriteLine записывает отформатированную результирующую строку в поток или файл.
Строка составного формата
Строка составного формата и список объектов используются в качестве аргументов методов, поддерживающих составное форматирование. Строка составного формата состоит из блоков фиксированного текста числом от нуля и больше, перемежаемых одним или несколькими элементами форматирования. Фиксированным текстом может являться произвольная строка, а каждый элемент форматирования должен соответствовать объекту или упакованной структуре из списка. В ходе составного форматирования создается новая результирующая строка, в которой все элементы форматирования заменены на строковое представление соответствующих объектов из списка.
Рассмотрим следующий фрагмент кода Format.
string myName = "Fred";
String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now);
|
Фиксированным текстом здесь является "Name = " и ", hours = ". Элементы форматирования здесь — это "{0}" c индексом 0, который соответствует объекту myName, и "{1:hh}" с индексом 1, который соответствует объекту DateTime.Now.
Format Item Syntax
Each format item takes the following form and consists of the following components:
{index[,alignment][:formatString]}
The matching braces ("{" and "}") are required.
Index Component
The mandatory index component, also called a parameter specifier, is a number starting from 0 that identifies a corresponding item in the list of objects. That is, the format item whose parameter specifier is 0 formats the first object in the list, the format item whose parameter specifier is 1 formats the second object in the list, and so on.
Multiple format items can refer to the same element in the list of objects by specifying the same parameter specifier. For example, you can format the same numeric value in hexadecimal, scientific, and number format by specifying a composite format string like this: "{0:X} {0:E} {0:N}".
Each format item can refer to any object in the list. For example, if there are three objects, you can format the second, first, and third object by specifying a composite format string like this: "{1} {0} {2}". An object that is not referenced by a format item is ignored. A runtime exception results if a parameter specifier designates an item outside the bounds of the list of objects.
Alignment Component
The optional alignment component is a signed integer indicating the preferred formatted field width. If the value of alignment is less than the length of the formatted string, alignment is ignored and the length of the formatted string is used as the field width. The formatted data in the field is right-aligned if alignment is positive and left-aligned if alignment is negative. If padding is necessary, white space is used. The comma is required if alignment is specified.
Синтаксис элементов форматирования
Каждый элемент форматирования имеет следующий вид и состоит из следующих компонентов:
{ index[,alignment][:formatString]}
Парные фигурные скобки ("{" и "}") здесь обязательны.
Индекс
Обязательный компонент index, также называемый описателем параметра, — это число, определяющее соответствующий объект из списка; индексация элементов ведется от нуля. Иными словами, элемент форматирования с индексом 0 отвечает за формат первого объекта в списке, элемент форматирования с индексом 1 служит для форматирования второго объекта в списке и т. д.
На один и тот же элемент в списке объектов может ссылаться сразу несколько элементов форматирования — достигается это путем задания одинакового описателя параметра. Например, одно и то же числовое значение можно представить в шестнадцатеричном, экспоненциальном или десятичном формате заданием соответствующей строки составного форматирования {0:X}, {0:E}, или {0:N}.
Любой элемент форматирования может ссылаться на произвольный объект списка. Например, если имеется три объекта, то можно отформатировать сначала второй, а затем первый и третий объекты, задав следующую строку составного форматирования: "{1} {0} {2}". Объекты, на которые не ссылаются элементы форматирования, пропускаются. Если описатель параметра ссылается на элемент за пределами списка объектов, то во время выполнения создается исключение.
Выравнивание
Необязательный компонент alignment — это целое число со знаком, которое служит для указания желательной ширины поля форматирования. Если значение alignment меньше длины форматируемой строки, то alignment пропускается, и в качестве значения ширины поля используется длина форматируемой строки. Форматируемые данные выравниваются в поле по правому краю, если alignment имеет положительное значение, или по левому краю, если alignment имеет отрицательное значение. При необходимости отформатированная строка дополняется пробелами. При использовании компонента alignment необходимо поставить запятую.
Format String Component
The optional formatString component is a format string that is appropriate for the type of object being formatted. Specify a numeric format string if the corresponding object is a numeric value, a date and time format string if the corresponding object is a DateTime object, or an enumeration format string if the corrersponding object is an enumeration value. If formatString is not specified, the general ("G") format specifier for a numeric, date and time, or enumeration type is used. The colon is required if formatString is specified.
Escaping Braces
Opening and closing braces are interpreted as starting and ending a format item. Consequently, you must use an escape sequence to display a literal opening brace or closing brace. Specify two opening braces ("{{") in the fixed text to display one opening brace ("{"), or two closing braces ("}}") to display one closing brace ("}"). Braces in a format item are interpreted sequentially in the order they are encountered. Interpreting nested braces is not supported.
The way escaped braces are interpreted can lead to unexpected results. For example, consider the format item "{{{0:D}}}", which is intended to display an opening brace, a numeric value formatted as a decimal number, and a closing brace. However, the format item is actually interpreted in the following manner:
The first two opening braces ("{{") are escaped and yield one opening brace.
The next three characters ("{0:") are interpreted as the start of a format item.
The next character ("D") would be interpreted as the Decimal standard numeric format specifier, but the next two escaped braces ("}}") yield a single brace. Because the resulting string ("D}") is not a standard numeric format specifier, the resulting string is interpreted as a custom format string that means display the literal string "D}".
The last brace ("}") is interpreted as the end of the format item.
The final result that is displayed is the literal string, "{D}". The numeric value that was to be formatted is not displayed.
One way to write your code to avoid misinterpreting escaped braces and format items is to format the braces and format item separately. That is, in the first format operation display a literal opening brace, in the next operation display the result of the format item, then in the final operation display a literal closing brace.
Компонент строки формата
Необязательный компонент formatString — это строка формата, соответствующая типу форматируемого объекта. Если соответствующий объект является числовым значением, используется строка форматирования чисел, а если соответствующий объект относится к типу DateTime, то используется строка форматирования даты и времени; если же соответствующий объект является значением перечисления, используется строка форматирования перечислений. Если компонент formatString не задан, то для числовых значений, значений даты и времени, а также перечислений используется общий формат ("G"). При использовании компонента formatString необходимо поставить двоеточие.
Оформление фигурных скобок17
Начало и конец элемента форматирования обозначаются соответственно открывающей и закрывающей фигурной скобкой. Это означает, что для вывода открывающих и закрывающих фигурных скобок необходимо использовать escape-последовательности. Для вывода открывающей или закрывающей фигурной скобки в фиксированном тексте следует поставить две открывающие или, соответственно, закрывающие фигурные скобки подряд ("{{" или "}}"). Фигурные скобки в элементе форматирования интерпретируются последовательно в порядке их обнаружения. Интерпретация вложенных скобок не поддерживается.
Порядок интерпретации скобок может привести к непредвиденным результатам. Например, рассмотрим элемент форматирования "{{{0:D}}}", который должен вывести открывающую фигурную скобку, числовое значение, отформатированное в десятичном виде, и закрывающую фигурную скобку. В действительности элемент форматирования будет интерпретирован следующим образом:
Первые две открывающие фигурные скобки ("{{") составляют escape-последовательность, которая дает в итоге одиночную открывающую фигурную скобку.
Следующие три знака ("{0:") воспринимаются как начало элемента форматирования.
Следующий знак ("D") должен интерпретироваться как указатель на десятичный числовой формат, но стоящая за ним пара фигурных скобок ("}}") дает в результате одиночную фигурную скобку. Поскольку результирующая строка ("D}") не является стандартным описателем числового формата, то она будет интерпретирована как строка пользовательского формата, что приведет к выводу строки "D}".
Последняя фигурная скобка ("}") интерпретируется как конец элемента форматирования.
Итоговый результат, который будет выведен — строка "{D}". Числовое значение, которое требовалось отформатировать, выведено не будет.
Одним из способов избежать неправильной интерпретации фигурных скобок и элементов форматирования при написании кода является раздельное форматирование фигурных скобок и элементов форматирования. Это означает, что первая операция форматирования должна выводить строку с открывающей фигурной скобкой, следующая операция — результат обработки элемента форматирования, а последняя операция — строку с закрывающей фигурной скобкой.
Processing Order
If the value to be formatted is null, an empty string ("") is returned.
If the type to be formatted implements the ICustomFormatter interface, the ICustomFormatter..::.Format method is called.
If the preceding step does not format the type, and the type implements the IFormattable interface, the IFormattable..::.ToString method is called.
If the preceding step does not format the type, the type's ToString method, which is inherited from the Object class, is called.
Alignment is applied after the preceding steps have been performed.
Порядок обработки18
При форматировании значения null возвращается пустая строка ("").
Если форматируемый тип реализует интерфейс ICustomFormatter, то вызывается метод ICustomFormatter..::.Format.
Если выполнение предыдущего шага не привело к форматированию типа и тип при этом реализует интерфейс IFormattable, то будет вызван метод IFormattable..::.ToString.
Если выполнение предыдущего шага не привело к форматированию типа, то вызывается метод ToString, который тип наследует от класса Object.
После выполнения предшествующих шагов производится выравнивание.
Code Examples
The following example shows one string created using composite formatting and another created using an object's ToString method. Both types of formatting produce equivalent results.
string FormatString1 = String.Format("{0:dddd MMMM}", DateTime.Now);
string FormatString2 = DateTime.Now.ToString("dddd MMMM");
|
Assuming that the current day is a Thursday in May, the value of both strings in the preceding example is Thursday May in the U.S. English culture.
Console.WriteLine exposes the same functionality as String.Format. The only difference between the two methods is that String.Format returns its result as a string, while Console.WriteLine writes the result to the output stream associated with the Console object. The following example uses the Console.WriteLine method to format the value of MyInt to a currency value.
int MyInt = 100;
Console.WriteLine("{0:C}", MyInt);
|
This code displays $100.00 to the console on computers that have U.S. English as the current culture.
The following example demonstrates formatting multiple objects, including formatting one object two different ways.
string myName = "Fred";
String.Format("Name = {0}, hours = {1:hh}, minutes = {1:mm}",
myName, DateTime.Now);
|
The output from the preceding string is "Name = Fred, hours = 07, minutes = 23", where the current time reflects these numbers.
Примеры кода
В приведенном ниже примере одна строка создается с помощью составного форматирования, а другая — с помощью метода ToString. Оба способа форматирования дают идентичные результаты.
string FormatString1 = String.Format("{0:dddd MMMM}", DateTime.Now);
string FormatString2 = DateTime.Now.ToString("dddd MMMM");
|
Предположим, что сейчас май, а текущий день недели — четверг; тогда значение обеих строк для языка и региональных параметров "Английский (США)" в предыдущем примере будет равно Thursday May.
Метод Console.WriteLine обладает той же функциональностью, что и String.Format. Единственное различие между двумя методами состоит в том, что метод String.Format возвращает результат в виде строки, а Console.WriteLine записывает результат в выходной поток, связанный с объектом Console.
В следующем примере для форматирования значения переменной MyInt в виде денежной единицы используется метод Console.WriteLine.
int MyInt = 100;
Console.WriteLine("{0:C}", MyInt);
|
На тех компьютерах, где выбраны языковые и региональные параметры "Английский (США)", этот код будет выводить на консоль строку $100.00.
В следующем примере демонстрируется форматирование нескольких объектов, в том числе форматирование одного и того же объекта двумя разными способами.
string myName = "Fred";
String.Format("Name = {0}, hours = {1:hh}, minutes = {1:mm}",
myName, DateTime.Now);
|
Результатом обработки приведенной выше строки станет строка "Name = Fred, hours = 07, minutes = 23", числа в которой соответствуют текущему времени.
The following examples demonstrate the use of alignment in formatting. The arguments that are formatted are placed between vertical bar characters (|) to highlight the resulting alignment.
string myFName = "Fred";
string myLName = "Opals";
int myInt = 100;
string FormatFName = String.Format("First Name = |{0,10}|", myFName);
string FormatLName = String.Format("Last Name = |{0,10}|", myLName);
string FormatPrice = String.Format("Price = |{0,10:C}|", myInt);
Console.WriteLine(FormatFName);
Console.WriteLine(FormatLName);
Console.WriteLine(FormatPrice);
FormatFName = String.Format("First Name = |{0,-10}|", myFName);
FormatLName = String.Format("Last Name = |{0,-10}|", myLName);
FormatPrice = String.Format("Price = |{0,-10:C}|", myInt);
Console.WriteLine(FormatFName);
Console.WriteLine(FormatLName);
Console.WriteLine(FormatPrice);
|
The preceding code displays the following to the console in the U.S. English culture. Different cultures display different currency symbols and separators.
First Name = | Fred|
Last Name = | Opals|
Price = | $100.00|
First Name = |Fred |
Last Name = |Opals |
Price = |$100.00 |
|
Ниже приведен пример использования выравнивания при форматировании. Форматируемые аргументы разделены знаками вертикальной черты ("|"), подчеркивающими полученное выравнивание.
--------------
При выборе языка и региональных параметров "Английский (США)" этот код выведет на консоль следующий текст. При выборе различных языковых и региональных параметров знаки денежных единиц и разделители также различаются.
First Name = | Fred|
Last Name = | Opals|
Price = | $100.00|
First Name = |Fred |
Last Name = |Opals |
Price = |$100.00 |
|
|